Python 微信公众号文章爬取的示例代码

作者:稚小白 时间:2021-11-06 22:39:20 

一.思路

我们通过网页版的微信公众平台的图文消息中的超链接获取到我们需要的接口

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的用法,以及如何获取到请求接口。但是需要注意的是当我们循环获取文章时,一定要设置延迟时间,不然账号很容易被封禁,从而得不到返回的数据。

来源:https://blog.csdn.net/qq_36684855/article/details/110226009

标签:Python,微信公众号,爬取
0
投稿

猜你喜欢

  • Python爬虫实例爬取网站搞笑段子

    2022-11-29 17:14:33
  • 一文掌握Go语言并发编程必备的Mutex互斥锁

    2024-05-13 10:43:30
  • python中对%、~含义的解释

    2021-07-08 01:18:54
  • Python之random库的常用函数有哪些

    2022-10-04 03:01:13
  • MySql中流程控制函数/统计函数/分组查询用法解析

    2024-01-26 09:33:38
  • jquery模拟SELECT下拉框取值效果

    2024-04-22 12:58:56
  • 如何把一个Excel文件放到ASP页面中去?

    2009-11-07 17:54:00
  • 对tensorflow中cifar-10文档的Read操作详解

    2022-08-10 06:59:10
  • 一文教你利用Python制作一个C盘清理器

    2022-05-05 00:45:20
  • 详解Mysql主从同步配置实战

    2024-01-14 16:36:13
  • 如何使用django的MTV开发模式返回一个网页

    2023-07-04 21:47:06
  • Vue便签的简单实现

    2024-05-02 17:03:31
  • 基于jupyter代码无法在pycharm中运行的解决方法

    2023-09-15 06:46:38
  • Apache为mysql以及自己的项目设置虚拟路径

    2024-01-27 23:45:05
  • 详解Python如何批量检查图像是否可用

    2021-10-03 13:42:07
  • Python队列、进程间通信、线程案例

    2021-10-23 16:43:03
  • Python实现读取大量Excel文件并跨文件批量计算平均值

    2023-10-21 06:53:12
  • Python中处理Session和Cookie的方法

    2023-09-09 00:51:18
  • Python Numpy教程之排序,搜索和计数详解

    2021-10-31 05:30:21
  • OpenCV-Python实现通用形态学函数

    2022-02-13 18:10:33
  • asp之家 网络编程 m.aspxhome.com