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实现CET查分的方法
Mar 10 Python
python根据出生日期返回年龄的方法
Mar 26 Python
Python实现在线程里运行scrapy的方法
Apr 07 Python
django接入新浪微博OAuth的方法
Jun 29 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
python后端接收前端回传的文件方法
Jan 02 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 Python
python使用多线程查询数据库的实现示例
Aug 17 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
yii2的restful api路由实例详解
2019/05/14 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
python中np是做什么的
2020/07/21 Python
Python爬虫与反爬虫大战
2020/07/30 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
python FTP编程基础入门
2021/02/27 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
企业出纳岗位职责
2014/03/12 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
教室标语大全
2014/06/21 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
python开发人人对战的五子棋小游戏
2022/05/02 Python
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis