Python爬取指定微信公众号所有文章!
篇文章使用到的技术: mitmdump + 电脑版微信
先分析打开可视化抓包工具, 勾选https代理商。而后打开电脑版微信
任意点击一个公众号,再点击查看历史消息
注释:全面教程,入门书籍,学习源码可以增加小编学习群943752371直接获取。
打开后这样
向下滑动右侧的滚动条,同时观察抓包软件,有新的数据加载就可中止滑动,仔细分析抓包软件的数据
呐,接口已经找到了。 下面来分析它的请求参数
上面这些参数我们后面通过mitmdump抓到即可以使用,关键点在于如何构造下一次请求。通过多下滑几次发现,其它参数都是固定不变的,只是offset这个关键参数来控制它的翻页。通过观察响应
可以找到nextoffset这个参数就是下一次请求的offset参数。那如何知道它已经翻究竟了,没有更多内容了呢? 你可以控制滑轮一直下滑,观察最后一个接口的响应体内容,就会发现canmsg_continue=0假如可以翻页的话,这个参数的值为1。
分析完毕我们即可以编写抓包的脚本了
这样即可以获取初次打开公众号的参数(注意: 这些参数就仅对这一个公众号有用,等控制台打印 爬取完毕,再去点击另外一个公众号)。 而后交给parse去解析下载
import
requests
import
json
import
time
from
lxml
import
etree
def
parse
(
__biz
,
uin
,
key
,
pass_ticket
,
appmsg_token
=
“”
,
offset
=
“0”
,
**
kwargs
):
url
=
“txe_eliforp/pm/moc.qq.nixiew.pm//:sptth”[::-1]
headers
=
{
“User-Agent”
:
“Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400”
,
}
params
=
{
“action”
:
“getmsg”
,
“__biz”
:
__biz
,
“f”
:
“json”
,
“offset”
:
str
(
offset
),
“count”
:
“10”
,
“is_ok”
:
“1”
,
“scene”
:
“124”
,
“uin”
:
uin
,
“key”
:
key
,
“pass_ticket”
:
pass_ticket
,
“wxtoken”
:
“”
,
“appmsg_token”
:
appmsg_token
,
“x5”
:
“0”
,
}
proxies
=
{
“https”
:
None
,
“http”
:
None
,
}
res
=
requests
.
get
(
url
,
headers
=
headers
,
params
=
params
,
proxies
=
proxies
,
timeout
=
3
)
data
=
json
.
loads
(
res
.
text
)
msg_list
=
eval
(
data
.
get
(
“general_msg_list”
)).
get
(
“list”
,
[])
for
i
in
msg_list
:
url
=
i
[
“app_msg_ext_info”
][
“content_url”
]
title
=
i
[
“app_msg_ext_info”
][
“title”
]
(
title
,
url
)
# 判断能否可继续翻页 1-可以翻页 0-究竟了
if
1
==
data
.
get
(
“can_msg_continue”
,
0
):
time
.
sleep
(
3
)
parse
(
__biz
,
uin
,
key
,
pass_ticket
,
appmsg_token
,
data
[
“next_offset”
])
else
:
(
“爬取完毕”
)
大体代码就这样了,可以获取到标题和里面的内容了,最后我使用的pdfkit这个包 保存为pdf。
这里给大家说下这里面的坑,不知道大家发现没有,开启了mitmdump 是不能抓到 自身电脑的http请求包的,而Fiddler和Charles即可以直接抓到。 mitmdump需要设置代理商,具体设置步骤如下:
而后大家一定发现我的parse函数里为什么有一行设置代理商的参数,而http和https的代理商全为None
假如不加上他,它就会走代理商,而且报一个 无法连接到代理商的错误。具体错误,大家可以尝试一下。除非关闭刚才设置的代理商,那假如关闭了, mitmdump就又抓不到电脑的请求包了。。。。所以这里必需要这样设置。其实还有种方法,下面把这两种代码都贴上
这样就OK了。道路很曲折,花了一下午时间才弄好。。。。存储为pdf也有些坑,比方保存的pdf没有图片-_-!!,这些问题开另一篇说,这里就不赘述了!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Python爬取指定微信公众号所有文章!