Python 篇 - 微信公众号历史文章信息爬虫

2,693 阅读2分钟

请输入标题     bcdef

一个简易非全自动的私人微信公众号文章爬虫,爬取文章标题、作者、封面、链接等相关资料

请输入标题     abcdefg

First

第一次写Python项目,选择从爬虫这个相对入门简单的方向入手,从中午开始写直到现在晚上9点整,花了将近9个小时琢磨,语法的不熟悉及对正则的模糊印象耽误了时间,经常写几行得查下字典、队列、元组的用法,不过还算顺利。

              

             

这个项目仅作为个人爬取私人公众号文章用,所有没有去爬IP库做动态IP,试着爬了一下某个个IP网站,但是后来把我本机IP给封了😅😅😅。于是没做这块了。


在微信爬取这块,调试代码的时候也是一开始把数据爬下来存在本地,从本地读取。


稍微复杂一点的地方是更多页加载的url参数拼接,及爬虫返回数据的正则匹配以及cookie的保存。

请输入标题     abcdefg

用到技术栈如下:


  • Python3.5

  • BeautifulSoup

  • Mysql5.7

  • pyenv(环境版本控制) 


下面是一些细节方面

拼接请求URL参数

param value
uin from response
key from response
f josn
frommsgid commmsginfo->id
count 10
uin 首次URL的uin
key from response
pass_ticket 首次URL的pass_ticket把%替换成%2525
wxtoken (此项为空)
x5 0

请输入标题     bcdef

我是直接拿到我公众号历史记录链接用Charles抓包,拿到首页10条的请求链接,再用 Python 自带的request库去拿页面数据,根据返回数据,提取在script里面的关键信息,拼装第二页10条信息的请求链接,试了一下想一次拿20条不行,就算参数传20,微信固定只返回10条数据,除首页外请求其他页面都要带上cookie,否则请求会不通过,然后递归操作,直到数据拿完。再针对文章数据做分析。最后存库。


请输入标题     abcdefg

踩坑的地方是:

  •  首页链接有效时长大概在15-30分钟左右,过了有效时长得重新抓包

  •  请求需携带cookie

  •  Mysql存库时无法自动识别数据里特殊字符,需自己做处理 

  •  数据库链接要设定字符编码

  •  批量插入字段个数一定要数对😭😭😭



以下是抓包过程及存库


首页抓包

其他页抓包

主要代码

数据库数据


下一步想爬下view、star及评论数,代码在github,第一次写Python,请多指教!