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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python3 queue队列模块详细介绍
Jan 05 Python
PyQt5每天必学之组合框
Apr 20 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
kafka-python批量发送数据的实例
Dec 27 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
Python基于httpx模块实现发送请求
Jul 07 Python
90行Python代码开发个人云盘应用
Apr 20 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 Python
python实现语音常用度量方法的代码详解
May 25 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如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
JS event使用方法详解
2008/04/28 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
vue小白入门教程
2018/04/02 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python callable()函数用法实例分析
2018/03/17 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
免税水晶:Duty Free Crystal
2019/05/13 全球购物
如何设置Java的运行环境
2013/04/05 面试题
文明宿舍获奖感言
2014/02/07 职场文书
导师就业推荐信范文
2014/05/22 职场文书
旷工检讨书大全
2015/08/15 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书