如何利用爬虫爬微信公众号的内容?

Python09

如何利用爬虫爬微信公众号的内容?,第1张

过程很繁琐,步骤如下:

1、写按键精灵脚本,在手机上自动点击公号文章列表页,也就是“查看历史消息”;

2、使用fiddler代理劫持手机端的访问,将网址转发到本地用php写的网页;

3、在php网页上将接收到的网址备份到数据库;

4、用python从数据库取出网址,然后进行正常的爬取。

如果只是想爬取文章内容,似乎并没有访问频率限制,但如果想抓取阅读数、点赞数,超过一定频率后,返回就会变为空值,我设定的时间间隔为10秒,可以正常抓取,这种频率下,一个小时只能抓取360条,已经没什么实际意义了。

微信公众号数据储存

1、腾讯不对你在本服务中相关数据的删除或储存失败负责。

2、腾讯有权根据实际情况自行决定单个用户在本服务中数据的最长储存期限,并在服务器上为其分配数据最大存储空间等。你可根据自己的需要自行备份本服务中的相关数据。

3、如果你停止使用本服务或服务被终止或取消,腾讯可以从服务器上永久地删除你的数据。服务停止、终止或取消后,腾讯没有义务向你返还任何数据。

一直都觉得微信公众号是爬虫的理想对象,获取到的对象url在手机上展示非常的赞,广告排版都在能接受的范围内,正好最近2练手python爬虫,果断的上了。

首先分析一下搜狗微信公众号的手机端:

这里的请求非常简单 分析之后可以发现基本就是:

url='http://weixin.sogou.com/wapindex/wap/0612/wap_9/%d.html'%i

变换的也就是后面的数字

然后正常使用requests去请求:

response=requests.get(url,headers=mergedHeaders)

然后就乱码了,这里我尝试了很多解码方式,但是都解决不了,当然最后折腾了好久之后发现是html的gzip压缩问题,在网络上查询基本都是urllib2的解决办法

重新查询requests的官方文档发现了我需要的:

很明显,这里说了使用response.content方法

Requests会自动解码gzip,不过返回的是byte内容,所以我们只需要将byte to String 就可以了,好,尝试一下

转换方法:

def byteToString(byteData):

'''

将byte转化为String

:parambyteData:

:return: String

'''

returnBytesIO(byteData).read().decode()

然后请求内容:

response=requests.get(url,headers=mergedHeaders)

ifresponse.headers['Content-Encoding']=='gzip':

result=BytesIO(response.content).read().decode()

returnresult

else:

returnresponse.text

问题解决