微信公众号采集

通过搜狗搜索微信公众号然后拿到链接
通过fiddler检测手机微信拿到链接。

首先,打开fiddler,然后在电脑端微信上找到要爬取的微信公众号,然后左键点一下就会有一个查看所有历史信息。点击查看历史信息之后我们就会在fiddler上看到一条这样的GET请求:

https://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MzI4OTY3MTUyNg==&uin=MTQ5NDc2MzE4MQ%3D%3D&key=9ed1e92b9529bc9a24e90253ee09147d9dbc8de3d4dcc62bf923bb2ec092b91c916834736670d2c9323064b3169960259315b632a5640b5953c26e430ebc0a318ea2fb69e310d6a0d825b88d289c9d22&devicetype=Windows+10&version=6206014b&lang=zh_CN&ascene=7&pass_ticket=RfVlWdojZictLscNXkIW1HTYHt1%2F72zegQ5hLGgHZLYSKAjmYJfTMx56Ql57coFp

在这个前面加上https://mp.weixin.qq.com后在浏览器中打开整个链接就会发现打开了这个公众号的历史文章了。
多用fiddler抓几次这个链接以及换几个公众号后就会发现,
整个链接里面biz应该是微信公众号的标识符,uin应该是微信号的标识,key是腾讯的一个算法。
在整个链接里面,如果是抓同一个微信公众号的话,那么只有key是有时效性的,其它的都是不变的。
超过一定时间的话,再用这个key打开链接就会发现不能用了,提示请用微信打开了!

通过审查这个链接里面的元素,我们不难发现,已经可以看到文章的链接了,但是问题来了,这个初始链接里依然只有10条最近的文章。这个时候,我们必须往下滑动滚动条才能把剩下的文章全部的显示出来。所以在写程序的时候就需要通过selenium+phahtomJS来链接这个界面并且滑动滚动条,知道滚动条滑到最下面为止了。这样我们再审查元素就可以看到获得了全部的文章链接。 注意,文章的链接分别藏在几种标签里面,所以要把他们全部找出来,不然会遗漏的! 然后把这些链接存起来就好了。

程序
大概说一下我的程序思路: 整个流程就是通过selenium+phantomJS链接上面那个链接,通过BeautifulSoup提取页面,利用JS操作滚动条滚到底直到出现没有更多消息为止,最后找到所有链接后输出就行了(记得链接存在几种类型的tag里面,一定要找全)。由于朋友只需要这一个公众号的链接,而且因为同一个公众号的链接只有key在变,所以key就从bash获取就行了,其它的可以写在程序里。我是不是太懒了……..大概思路就是这样,还有很多可以优化的地方…

GET /mp/getmasssendmsg?__biz=MzI4OTY3MTUyNg==&uin=MTQ5NDc2MzE4MQ%3D%3D&key=9ed1e92b9529bc9a24e90253ee09147d9dbc8de3d4dcc62bf923bb2ec092b91c916834736670d2c9323064b3169960259315b632a5640b5953c26e430ebc0a318ea2fb69e310d6a0d825b88d289c9d22&devicetype=Windows+10&version=6206014b&lang=zh_CN&ascene=7&pass_ticket=RfVlWdojZictLscNXkIW1HTYHt1%2F72zegQ5hLGgHZLYSKAjmYJfTMx56Ql57coFp HTTP/1.1
Host: mp.weixin.qq.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
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.691.400 QQBrowser/9.0.2524.400
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4
Cookie: wxuin=1494763181; devicetype=Windows10; version=6206014b; lang=zh_CN; pass_ticket=RfVlWdojZictLscNXkIW1HTYHt1/72zegQ5hLGgHZLYSKAjmYJfTMx56Ql57coFp; wap_sid2=CK2N4cgFElxMWjNLejdIaldNa1NUMWdmUzFuTDFRaWZja1NkYkZXQVhZNGpHMVA5T2JOTnd5RjJUZ0tRTmxnVjJzem9QblJ3c2Y1czlzRi1uMUdoV0ExZVdRb0tzTFFEQUFBfjDSiK7VBTgNQAE=; rewardsn=d01dde220f29ddc218b3; wxtokenkey=777

__biz MzI4OTY3MTUyNg==
uin MTQ5NDc2MzE4MQ==
key 9ed1e92b9529bc9a24e90253ee09147d9dbc8de3d4dcc62bf923bb2ec092b91c916834736670d2c9323064b3169960259315b632a5640b5953c26e430ebc0a318ea2fb69e310d6a0d825b88d289c9d22
devicetype Windows 10
version 6206014b
lang zh_CN
ascene 7
pass_ticket RfVlWdojZictLscNXkIW1HTYHt1/72zegQ5hLGgHZLYSKAjmYJfTMx56Ql57coFp

作者:tahr
链接:https://www.zhihu.com/question/21065229/answer/132993179
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. 插入本地图片只需要在基础语法的括号中填入图片的位置路径即可,支持绝对路径和相对路径。例如:![avatar](/user/desktop/doge.png)缺点是不灵活不好分享,本地图片的路径更改或丢失都会造成markdown文件调不出图。2.插入网络图片只需要在基础语法的括号中填入图片的网络链接即可,现在已经有很多免费/收费图床和方便传图的小工具可选。例如:![avatar](http://baidu.com/pic/doge.png)缺点是图片存在网络服务器上,非常依赖网络。3.把图片存入markdown文件用base64转码工具把图片转成一段字符串,然后把字符串填到基础格式中链接的那个位置。基础用法:![avatar](data:image/png;base64,iVBORw0......)这个时候会发现插入的这一长串字符串会把整个文章分割开,非常影响编写文章时的体验。如果能够把大段的base64字符串放在文章末尾,然后在文章中通过一个id来调用,文章就不会被分割的这么乱了。就像写论文时的文末的注释和参考文档一样。这个想法可以通过markdown的参考式链接语法来实现。进阶用法如下:文中引用语法:![avatar][doge]文末存储字符串语法:[doge]:data:image/png;base64,iVBORw0......

原图

https://mmbiz.qpic.cn/mmbiz_png/THumz4762QALMjJxts1uZHuPX3WDTGtcnL3lAfyVAicmGmoxRK4MGZbkJkC3Oibxtgg21gaf66NDv1kxUIEhygJA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1

https://mmbiz.qpic.cn/mmbiz_jpg/Kad3LZzM7n550AK0PmEQ5tx0SfsOcDhTu0xe3h4wHLllzc4oArkQ3IsPWEZibX7ZfNaCzpAkcFIqJFsqTzklYiaw/0

得去掉640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1 后面的参数 为0

https://mmbiz.qpic.cn/mmbiz_png/THumz4762QALMjJxts1uZHuPX3WDTGtcXIo6Wu5bYzy8sYCr3JxVkwcxCgfBmIMEMgvRWiaZ4WZianIiaXbSvzsRg/0

2018-03-20 17:41:30: 开始整合(5/10)
2018-03-20 17:41:30: 地址为: http://mp.weixin.qq.com/s?timestamp=1521538833&src=3&ver=1&signature=jyjSbdPOFF7GbiG-gfMO8btYXG2WZR63CRQ6uFMdAGU4YVsAM9evjQLhdLFgBMW0eE1tKmns0CFMjdKuRWcMP2Kd1PPQrieTxcJaHRaII2zz1hrswnSrKapJqygL8tfcKH0xWC39U6GXE-KsWzkyd2ewFm1GnLhjCylw1epVr9A=
2018-03-20 17:41:30: 文章简述: 本问主要描述如何使用Sentry实现数据的脱敏(masking of sensitive data elements)
2018-03-20 17:41:30: 发表时间为: 2018年3月16日原创
2018-03-20 17:41:30:
Traceback (most recent call last):
File "D:\HCT\wechat-history\hct-crawl.py", line 245, in <module>
weixin_spider('gh_c4c535955d0f').run()
File "D:\HCT\wechat-history\hct-crawl.py", line 217, in run
articles_list = self.switch_arctiles_to_list(articles)
File "D:\HCT\wechat-history\hct-crawl.py", line 99, in switch_arctiles_to_list
articles_list.append(self.parse_one_article(article,i,excel_content))
File "D:\HCT\wechat-history\hct-crawl.py", line 124, in parse_one_article
self.save_content_file(contentfiletitle,content)
File "D:\HCT\wechat-history\hct-crawl.py", line 163, in save_content_file
with open(title, 'w') as f:
IOError: [Errno 2] No such file or directory: u'gh_c4c535955d0f/\u539f\u521b \u5982\u4f55\u4f7f\u7528Sentry\u5b9e\u73b0Hive/Impala\u7684\u6570\u636e\u8131\u654f_2018\u5e743\u670816\u65e5\u539f\u521b.html'
[Finished in 110.4s]