专栏首页Aox Lei微信公众号信息抓取方法(一)——抓取公众号历史消息列表数据

微信公众号信息抓取方法(一)——抓取公众号历史消息列表数据

马上双十一了, 凑个热闹, 发布一篇重量级的文章。如何抓取微信公众号的文章

一、介绍

研究微信抓取之前, 看过知乎有大神写的比较完善的例子, 受到启发, 才完成了整个微信公众号的抓取。 微信公众号内容的批量采集与应用 微信抓取的难点: 1. 无法获取到微信公众号的信息(微信并没有提供列表) 2. 无法脱离客户端获取微信公众号历史消息页面 3. 可以获取到文章内容页但是脱离客户端后无法获取到点赞、阅读数据

所以, 流程中的一部分是依赖于手机客户端的, 如果要大量抓取微信公众号信息,就必须依靠大量客户端抓取(自己准备手机、微信号、电费、和人工)

基本使用的方式是和知乎大神说的一样的, 都是中间人代理攻击的方式。

一、抓取要使用的工具

知乎大神用的是nodejs, post给php处理, 并且github上有的大部分也是用这个方式, 或者纯nodejs的方式, 个人觉得受限太大, 最主要的原因是我不会nodejs, 简单学过一些, 不过使用的anyproxy, 还是会出现一些无法解决的问题, 无法适用于长期采集

  1. python3.5+
  2. mitmproxy
  3. 其他用到的包插件

二、微信抓取基本的应用规则

  1. 单个客户端公众号历史消息列表页, 一天访问次数不可以超过1300次, 保险点, 最好别超过1000次, 访问太多, 会提示页面无法打开或者操作频繁, 24小时以后自动解封
  2. 千万不要用客户端大量访问文章内容页, 会直接造成封号, 知乎大神的方式里, 是必须访问文章内容页的. 这个是大忌
  3. 单个客户端抓取多篇文章的阅读点赞的时间间隔必须超过2秒, 不然会返回unknow error的错误
  4. 单个客户端抓取阅读点赞一天不能超过6000, 要不然也会返回错误

三、抓取的基本逻辑

获取到公众号——访问公众号历史列表页面——抓取到第一页的文章列表数据以及cookie信息——其他脚本抓取点赞、阅读、评论和小程序信息

四、教程开始

1. 安装必备包

假设项目目录在/var/www/project 下

  1. 安装python3、virtualenv、pip 工具 自己百度
  2. 创建python虚拟环境
virtualenv -p python路径 --no-site-packages venv
source venv/bin/activate
  1. 安装必备包
pip install mitmproxy
pip install requests
其他mysql、redis或队列的包, 自己根据需要安装即可

2. 抓取历史详情页数据

# rule.py
import re
from mitmproxy import http
from content import content

content_list_url_redirect = 'https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=%s#wechat_redirect'

def response(flow):
    req_url = flow.request.pretty_url
    res_headers = flow.response.headers
    req_headers = flow.request.headers
    body = flow.response.text
    status_code = flow.response.status_code

    if status_code == 200:
        if re.compile('r'mp\.weixin\.qq\.com\/mp\/profile_ext\?action=home', re.I).findall(self.req_url):
            '''启动一个线程去抓取到的页面中获取到文章列表的处理'''
            _thread.append(threading.Thread(target=content().run, args=(body)))
            body = get_next_body()

            flow.response = http.HTTPResponse.make(
                200, bytes(body, encoding='utf-8'),
                {'Content-Type': 'text/html', 'Cache-Control': 'no-cache, must-revalidate'}
            )

def get_next_body(content_body):
    if body != '':
        wechat_account_name = parse_wechat_account_name(content_body)
        if wechat_account_name:
            _body = '<p>当前抓取公众号: %s</p>' % (wechat_account_name)
    else:
        _body = ''

    body = '''<meta http-equiv="content-type" content="text/html;charset=utf8">
        <meta id="viewport" name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
        <style>p {font-size:1.25em;}</style>
        %s
        <script>setTimeout(function(){window.location.href="%s";},%s);</script> %s''' %\
        (_body, get_next_url(), str(80*1000), content_body)

    return body

def parse_wechat_account_name(body):
    ''' 从内容中解析公众号名称 '''
    _regular = r'<strong\s+class="profile_nickname"\s+id="nickname">\s+(.*?)\s+</strong>'
    data = re.compile(_regular, re.I).findall(body)

    if data:
        return data[0]

    return False

def get_next_url():
    '''这部分写要跳转到下一页的url'''
# content.py
分析内容中的文章列表并保存
以及将cookie保存起来, 假设保存到redis中

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微信公众号信息抓取方法(二)——抓取文章点赞、阅读、评论、小程序信息

    上一篇文章文章将cookie信息保存到redis中, 则这一节主要是取出cookie, 并且构造方法去获取文章的点赞、阅读、评论、小程序信息, 而且不会访问文章...

    aox.lei
  • 安装sentry

    Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node、Django、RoR 等...

    aox.lei
  • php curl时遇到Can't load the certificate "..." and its private key: OSStatus -25299的问题

    php在执行curl 使用私钥访问https网站时, 提示Can't load the certificate "..." and its private ke...

    aox.lei
  • 另一种方法实现silverlight图片局部放大效果

      一時技痒于是也打算做一个出来。因为功能简单不如索性用纯xaml做,不写一行代码。当然,MouseDragElementBehavior这种东西也是要用到的,...

    dino.c
  • 机器学习工程师心得:特征工程比超参数调优更重要

    事实上,特征工程比超参数调优更重要,这是作为一个教训和一个重要的提醒而言的,这将彻底改变在构建任何机器学习模型之前处理问题和数据的方式。

    统计学家
  • 机器学习工程师心得:特征工程比超参数调优更重要

    事实上,特征工程比超参数调优更重要,这是作为一个教训和一个重要的提醒而言的,这将彻底改变在构建任何机器学习模型之前处理问题和数据的方式。

    AiTechYun
  • 达观杯文本智能处理挑战赛冠军解决方案

    之前整理了一份自己的Rank 4的解决方案,并开源了部分代码,原文链接:“达观杯”文本智能处理挑战赛,季军带你飞。这次分享一下朋友(NLP幼儿园)整理的"达观杯...

    yuquanle
  • 云原生数据库vitess简介

    Vitess是用于部署,扩展和管理MySQL实例的大型群集的数据库解决方案。它在架构上可以像在专用硬件上一样有效地在公共或私有云架构中运行。它结合了NoSQL数...

    有点技术
  • 动态 | 谷歌发布机器学习规则 关于机器学习工程的最佳实践(下)

    文章介绍了一种机器学习样式,类似于 Google C++ 样式指南和其他常用的实用编程指南。

    AI科技评论
  • 极目智能程建伟:在市场未定型时踏步入场,用7年时间兼顾打造ADAS前装和后装 | 镁客请讲

    镁客网

扫码关注云+社区

领取腾讯云代金券