美文网首页python入门基础学习程序员
Python爬取指定微信公众号所有文章!

Python爬取指定微信公众号所有文章!

作者: 编程新视野 | 来源:发表于2019-01-16 14:34 被阅读17次

篇文章使用到的技术: 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"

]

print

(

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

:

print

(

"爬取完毕"

)

大体代码就这样了,可以获取到标题和里面的内容了,最后我使用的pdfkit这个包 保存为pdf。

这里给大家说下这里面的坑,不知道大家发现没有,开启了mitmdump 是不能抓到 自身电脑的http请求包的,而Fiddler和Charles就可以直接抓到。 mitmdump需要设置代理,具体设置步骤如下:

然后大家肯定发现我的parse函数里为什么有一行设置代理的参数,而http和https的代理全为None

如果不加上他,它就会走代理,而且报一个 无法连接到代理的错误。具体错误,大家可以尝试一下。除非关闭刚才设置的代理,那如果关闭了, mitmdump就又抓不到电脑的请求包了。。。。所以这里必须要这样设置。其实还有种方法,下面把这两种代码都贴上

这样就OK了。道路很曲折,花了一下午时间才弄好。。。。存储为pdf也有些坑,比如保存的pdf没有图片-_-!!,这些问题开另一篇说,这里就不赘述了!

相关文章

网友评论

    本文标题:Python爬取指定微信公众号所有文章!

    本文链接:https://www.haomeiwen.com/subject/hhdmdqtx.html