bob-qianjiajie / WechatSpider-2

爬取微信公众号文章,不适用搜狗浏览器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

微信公众号定向爬虫


WechatSpider

爬取微信公众号文章,不适用搜狗浏览器

简介

  • 用于爬取某个微信公众号的所有文章列表信息
  • 提供运行状态的语音播报。
  • 提供MySQL,MongDB,俩种存储方式

使用前准备

  • 需要准备至少2个微信公众订阅号,这个需要自己申请,
  • 如果需要使用语音播报模块,需要安装 win32com

配置项

下载项目后,打开setting.py文件,进行配置

  • 下载延迟项,过快会被ban,建议在 20到30之前
DOWNLOAD_DELAY = 30
  • 选择默认的本地存储管道,
ITEM_PIPELINES = {
   'WeXinCrawler.pipelines.MongDBPipeline': 300
  # 'WeXinCrawler.pipelines.MysqlTwistedPipline': 300,
}
  • 公账号授权的信息的list,用于在爬虫被禁掉时,自动切换账户,无上限,至少2个
  • 这个需要自己在微信公众开放平台上,注册,注意是订阅号,不是小程序
AUTH_LIST = [
             {'Account':'160xxxxxx@qq.com','PassWord':'xxxxxxx'},
             {'Account':'119xxxxxx@qq.com','PassWord':'xxxxxxx'}
            ]
  • 需要爬取的公帐号的名称,暂不支持同时爬取多个公帐号
OFFICIAL_ACCOUNTS = '李叫兽'
#OFFICIAL_ACCOUNTS = '咪蒙'
#OFFICIAL_ACCOUNTS = 'Python中文社区'
  • 是否需要使用语音播报爬虫运行状态,当为True时,需要安装 python win32com 模块
SPEEK_ALLOW = False
  • MongDB数据库配置,需要配置ITEM_PIPELINES种MongDBPipeline存储
MONGO_HOST = "127.0.0.1"  # 主机IP
MONGO_PORT = 27017  # 端口号
MONGO_DB = "Weixin_Spider"  # 库名
MONGO_COLLECTION = "weixin_article"  # collection名
  • MySQL数据库连接配置,需要配置ITEM_PIPELINES种的MysqlTwistedPipline存储,建议使用
  • 需要自行建立数据表
    • 表名:weixin_spider
    • 字段:id
      • 类型:int
      • 主键
      • 自增长
    • 字段:cover
      • 类型:varchar
    • 字段:appmsgid
      • 类型:varchar
    • 字段:diqest
      • 类型:varchar
    • 字段:link
      • 类型:varchar
    • 字段:title
      • 类型:varchar
    • 字段:content
      • 类型:text
    • 字段:update_time
      • 类型:datetime
MYSQL_HOST = "127.0.0.1"
MYSQL_DBNAME = "Weixin_Spider"
MYSQL_USER = "root"
MYSQL_PASSWORD = "xxxxxx"

数据库表结构

                  CREATE TABLE `weixin_spider` (                             
                     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,               
                     `cover` varchar(255) DEFAULT NULL,                           
                     `appmsgid` varchar(255) DEFAULT NULL,                        
                     `diqest` varchar(255) DEFAULT NULL,                          
                     `link` varchar(255) DEFAULT NULL,                            
                     `title` varchar(255) DEFAULT NULL,
                     `content` text COMMENT '文章内容', 
                     `update_time` timestamp NULL DEFAULT '0000-00-00 00:00:00',  
                     PRIMARY KEY (`id`)                                           
                   ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4

使用

  • 启动
  • 扫码登录
  • 等待爬虫执行完成

详细制作说明

登陆部分

  • 使用多线程构建登录模块(同步模式)
  • selenium打开网页,输入设置的账户和密码信息
  • 需要手动进行扫码登录,这个是微信的登录机制导致的
  • 返回token,cookies
  • 具体的逻辑可以查看 AuthManager.py这个文件

进行爬取

  • 根据登录获取的tokencookies进行headers构建
  • 发起请求进行 公帐号的获取,返回数据格式为json,需要获取fakeid
  • 根据获取的fakeid进行具体的文章列表解析。返回数据为json
  • 解析总页数,进行文章列表的递归爬取
  • 遍历爬取文章内容

爬取文章

参考文章

待完善

  • 多个公帐号同时爬取
  • 授权账户的本地化
  • 文章图片抓取

问题

  • 文章内容能够入库,会有报错,持续更新中...
  • 期待大神纠正、优化

About

爬取微信公众号文章,不适用搜狗浏览器

License:Apache License 2.0


Languages

Language:Python 100.0%