微信公众号文章爬取思路

流氓凡 技术分享 2021-09-05 342 0

本篇仅作为公众号文章的爬取思路分析和方法,除去文章之外的比如点赞数,阅读数等不在本次说明范围之内. 

特别说明: 不求完美,只求能用!

难点分析

  1. 微信公众号历史文章数据来源

解决方案

    1. 利用搜狗搜索,可以搜索微信公众号文章.但是仅显示对应公众号的最近十篇文章,而且还不一定能搜索到相关的公众号.

    2. 利用抓包工具,抓取文章. 成本太大而且只能抓取原创文章.

    3. 利用微信个人订阅号进行抓取, 本篇主要将这个方法的实现思路和示例Demo.

操作起来

    1. 你需要注册一个微信个人订阅号,可以去这里https://mp.weixin.qq.com 不需要认证

    2. 登录之后,点击左侧的菜单"图文素材"->"新的创作"->"新建图文"

image.png

    3. 点击"超链接"->"选择其他公众号",接下来就开始操作并抓包数据吧

image.png

代码示例

以下是简单的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分钟左右)无法查看历史消息了,或者可以理解为无法持续抓取,并且不保证微信号能否被封号



评论