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 相关文章推荐
python如何通过protobuf实现rpc
Mar 06 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
python使用str & repr转换字符串
Oct 13 Python
Python实现购物车功能的方法分析
Nov 10 Python
用python处理图片实现图像中的像素访问
May 04 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python 读取文件并把矩阵转成numpy的两种方法
Feb 12 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
Python更新所有已安装包的操作
Feb 13 Python
Python request操作步骤及代码实例
Apr 13 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
基于文本的访客签到簿
2006/10/09 PHP
PHP文本操作类
2006/11/25 PHP
PHP获取文件后缀名的三个函数
2012/10/15 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
javascript 上下banner替换具体实现
2013/11/14 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
拖动时防止选中
2017/02/03 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Python多进程机制实例详解
2015/07/02 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
使用Python实现牛顿法求极值
2020/02/10 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python 多线程中join()的作用
2020/10/29 Python
运动会邀请函范文
2014/01/31 职场文书
日语系毕业求职信
2014/07/27 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
实习工作表现评语
2014/12/31 职场文书
春节慰问简报
2015/07/21 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
DE1103使用报告
2022/04/05 无线电
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android