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中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
Python3合并两个有序数组代码实例
Aug 11 Python
如何利用python实现Simhash算法
Jun 28 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+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
js实现微博发布小功能
2017/01/12 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
Promise.all中对于reject的处理方法
2018/08/01 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python中is和==的区别详解
2018/11/15 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
python中update的基本使用方法详解
2019/07/17 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
vue常用指令代码实例总结
2020/03/16 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
机械绘图员岗位职责
2013/11/19 职场文书
自主招生教师推荐信
2014/05/10 职场文书
建设工程授权委托书
2014/09/22 职场文书
横店影视城导游词
2015/02/06 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android