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 相关文章推荐
在Django的URLconf中进行函数导入的方法
Jul 18 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
python exit出错原因整理
Aug 31 Python
OpenCV读取与写入图片的实现
Oct 13 Python
python 通过使用Yolact训练数据集
Apr 06 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中数组定义的几种方法
2013/09/01 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
纯js和css实现渐变色包括静态渐变和动态渐变
2014/05/29 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
Flask框架Flask-Login用法分析
2018/07/23 Python
python实现贪吃蛇小游戏
2020/03/21 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
《鱼游到了纸上》教学反思
2014/02/20 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
导游词之介休绵山
2019/12/31 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Python必备技巧之字符数据操作详解
2022/03/23 Python
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python