Python 微信公众号文章爬取的示例代码


Posted in Python onNovember 30, 2020

一.思路

我们通过网页版的微信公众平台的图文消息中的超链接获取到我们需要的接口

Python 微信公众号文章爬取的示例代码

Python 微信公众号文章爬取的示例代码

从接口中我们可以得到对应的微信公众号和对应的所有微信公众号文章。

二.接口分析

获取微信公众号的接口:
https://mp.weixin.qq.com/cgi-bin/searchbiz?
参数:
action=search_biz
begin=0
count=5
query=公众号名称
token=每个账号对应的token值
lang=zh_CN
f=json
ajax=1
请求方式:
GET
所以这个接口中我们只需要得到token即可,而query则是你需要搜索的公众号,token则可以通过登录后的网页链接获取得到。

Python 微信公众号文章爬取的示例代码

获取对应公众号的文章的接口:
https://mp.weixin.qq.com/cgi-bin/appmsg?
参数:
action=list_ex
begin=0
count=5
fakeid=MjM5NDAwMTA2MA==
type=9
query=
token=557131216
lang=zh_CN
f=json
ajax=1
请求方式:
GET
在这个接口中我们需要获取的值有上一步的token以及fakeid,而这个fakeid则在第一个接口中可以获取得到。从而我们就可以拿到微信公众号文章的数据了。

Python 微信公众号文章爬取的示例代码

三.实现

 第一步:

首先我们需要通过selenium模拟登录,然后获取到cookie和对应的token

def weChat_login(user, password):
  post = {}
  browser = webdriver.Chrome()
  browser.get('https://mp.weixin.qq.com/')
  sleep(3)
  browser.delete_all_cookies()
  sleep(2)
  # 点击切换到账号密码输入
  browser.find_element_by_xpath("//a[@class='login__type__container__select-type']").click()
  sleep(2)
  # 模拟用户点击
  input_user = browser.find_element_by_xpath("//input[@name='account']")
  input_user.send_keys(user)
  input_password = browser.find_element_by_xpath("//input[@name='password']")
  input_password.send_keys(password)
  sleep(2)
  # 点击登录
  browser.find_element_by_xpath("//a[@class='btn_login']").click()
  sleep(2)
  # 微信登录验证
  print('请扫描二维码')
  sleep(20)
  # 刷新当前网页
  browser.get('https://mp.weixin.qq.com/')
  sleep(5)
  # 获取当前网页链接
  url = browser.current_url
  # 获取当前cookie
  cookies = browser.get_cookies()
  for item in cookies:
    post[item['name']] = item['value']
  # 转换为字符串
  cookie_str = json.dumps(post)
  # 存储到本地
  with open('cookie.txt', 'w+', encoding='utf-8') as f:
    f.write(cookie_str)
  print('cookie保存到本地成功')
  # 对当前网页链接进行切片,获取到token
  paramList = url.strip().split('?')[1].split('&')
  # 定义一个字典存储数据
  paramdict = {}
  for item in paramList:
    paramdict[item.split('=')[0]] = item.split('=')[1]
  # 返回token
  return paramdict['token']

定义了一个登录方法,里面的参数为登录的账号和密码,然后定义了一个字典用来存储cookie的值。通过模拟用户输入对应的账号密码并且点击登录,然后会出现一个扫码验证,用登录的微信去扫码即可。
刷新当前网页后,获取当前cookie以及token然后返回。

第二步:

1.请求获取对应公众号接口,取到我们需要的fakeid

url = 'https://mp.weixin.qq.com'
  headers = {
    'HOST': 'mp.weixin.qq.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63'
  }
  with open('cookie.txt', 'r', encoding='utf-8') as f:
    cookie = f.read()
  cookies = json.loads(cookie)
  resp = requests.get(url=url, headers=headers, cookies=cookies)
  search_url = 'https://mp.weixin.qq.com/cgi-bin/searchbiz?'
  params = {
    'action': 'search_biz',
    'begin': '0',
    'count': '5',
    'query': '搜索的公众号名称',
    'token': token,
    'lang': 'zh_CN',
    'f': 'json',
    'ajax': '1'
  }
  search_resp = requests.get(url=search_url, cookies=cookies, headers=headers, params=params)

将我们获取到的token和cookie传进来,然后通过requests.get请求,获得返回的微信公众号的json数据

lists = search_resp.json().get('list')[0]

通过上面的代码即可获取到对应的公众号数据

fakeid = lists.get('fakeid')

通过上面的代码就可以得到对应的fakeid

2.请求获取微信公众号文章接口,取到我们需要的文章数据

appmsg_url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
  params_data = {
    'action': 'list_ex',
    'begin': '0',
    'count': '5',
    'fakeid': fakeid,
    'type': '9',
    'query': '',
    'token': token,
    'lang': 'zh_CN',
    'f': 'json',
    'ajax': '1'
  }
  appmsg_resp = requests.get(url=appmsg_url, cookies=cookies, headers=headers, params=params_data)

我们传入fakeid和token然后还是调用requests.get请求接口,获得返回的json数据。
我们就实现了对微信公众号文章的爬取。

四.总结

通过对微信公众号文章的爬取,需要掌握selenium和requests的用法,以及如何获取到请求接口。但是需要注意的是当我们循环获取文章时,一定要设置延迟时间,不然账号很容易被封禁,从而得不到返回的数据。

到此这篇关于Python 微信公众号文章爬取的示例代码的文章就介绍到这了,更多相关Python 微信公众号文章爬取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
仅利用30行Python代码来展示X算法
Apr 01 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
对python 调用类属性的方法详解
Jul 02 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
python pygame实现挡板弹球游戏
Nov 25 Python
python的slice notation的特殊用法详解
Dec 27 Python
Python识别处理照片中的条形码
Nov 16 Python
python实现杨辉三角的几种方法代码实例
Mar 02 Python
python爬虫工具例举说明
Nov 30 #Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 #Python
运行python提示no module named sklearn的解决方法
Nov 29 #Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 #Python
python3实现名片管理系统(控制台版)
Nov 29 #Python
python3实现简单飞机大战
Nov 29 #Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 #Python
You might like
php 引用(&)详解
2009/11/20 PHP
PHP中session变量的销毁
2014/02/27 PHP
php中cookie的使用方法
2014/03/29 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
PHP导入导出Excel代码
2015/07/07 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
django settings.py 配置文件及介绍
2019/07/15 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
python图片合成的示例
2020/11/09 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
小学生个人先进事迹材料
2014/05/08 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS