微信公众号文章爬取思路
本篇仅作为公众号文章的爬取思路分析和方法,除去文章之外的比如点赞数,阅读数等不在本次说明范围之内.
特别说明: 不求完美,只求能用!
难点分析
微信公众号历史文章数据来源
解决方案
1. 利用搜狗搜索,可以搜索微信公众号文章.但是仅显示对应公众号的最近十篇文章,而且还不一定能搜索到相关的公众号.
2. 利用抓包工具,抓取文章. 成本太大而且只能抓取原创文章.
3. 利用微信个人订阅号进行抓取, 本篇主要将这个方法的实现思路和示例Demo.
操作起来
1. 你需要注册一个微信个人订阅号,可以去这里https://mp.weixin.qq.com 不需要认证
2. 登录之后,点击左侧的菜单"图文素材"->"新的创作"->"新建图文"
3. 点击"超链接"->"选择其他公众号",接下来就开始操作并抓包数据吧
代码示例
以下是简单的Python代码示例:
# -*- coding: utf-8 -*- import requests import time import json # 目标url url = "https://mp.weixin.qq.com/cgi-bin/appmsg" # 使用Cookie,跳过登陆操作 headers = { "Cookie": yourcookie, "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36", } """ 需要提交的data 以下个别字段是否一定需要还未验证。 注意修改yourtoken,number number表示从第number页开始爬取,为5的倍数,从0开始。如0、5、10…… token可以使用Chrome自带的工具进行获取 fakeid是公众号独一无二的一个id,等同于后面的__biz """ data = { "token": yourtoken, "lang": "zh_CN", "f": "json", "ajax": "1", "action": "list_ex", "begin": number, "count": "5", "query": "", "fakeid": yourfakeid, "type": "9", } # 使用get方法进行提交 content_json = requests.get(url, headers=headers, params=data).json() # 返回了一个json,里面是每一页的数据 for item in content_json["app_msg_list"]: # 提取每页文章的标题及对应的url print(item["title"], "url": item["link"])
以上,如果想翻页的话直接操作下begin字段即可, 需要注意的是,每页后最好 time.sleep(3) 过快会导致爬取失败,当然代理ip没测试过,有可能是根据token来做的判定.
最后总结
你需要掌握的基本技能:
1. 简单的Python语法
2. chrome的基本使用和调试
3. 网络爬虫基本常识
缺点:
1. 使用微信扫码登录,无法简单的实现自动登录
2. 经测试并不强制需要cookie,但是需要token,而且据说token半小时失效一次(我没有遇到过)
3. 实际运行过程中,就算设定爬取间隙时间,还是会被获取链接超时的, 这个目前对我所使用的场景还算可以接受,你可以尝试使用代理ip看看是否可以解决这个问题
大量数据爬取实现思路
1. 可以使用selenium进行抓取,可以提高差不多10倍的抓取量,但是速度慢,不一定能完全抓取完整,抓取量也不确定.
2. 利用个人微信号查看公众号历史消息,抓取量在500条以上,具体的还没有测试. 但是段时间内(10分钟左右)无法查看历史消息了,或者可以理解为无法持续抓取,并且不保证微信号能否被封号
评论