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实现对一个完整url进行分割的方法
Apr 29 Python
python动态网页批量爬取
Feb 14 Python
python实现简单socket通信的方法
Apr 19 Python
Python的装饰器使用详解
Jun 26 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
Python面向对象之类和实例用法分析
Jun 08 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
python爬虫基础知识点整理
Jun 02 Python
asyncio异步编程之Task对象详解
Mar 13 Python
使用python绘制分组对比柱状图
Apr 21 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
一个PHP的QRcode类与大家分享
2011/11/13 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
告诉大家什么是JSON
2008/06/10 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
python3实现windows下同名进程监控
2018/06/21 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
课程设计心得体会
2013/12/28 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
完美的中文自荐信
2014/05/24 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
学校个人对照检查材料
2014/08/26 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL