热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:如何使用python3抓取微信公众号文章,了解一下?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何使用python3抓取微信公众号文章,了解一下?相关的知识,希望对你有一定的参考价值。通过微信公众平台的查

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何使用python3抓取微信公众号文章,了解一下?相关的知识,希望对你有一定的参考价值。



通过微信公众平台的查找文章接口,抓取我们需要的相关文章


1.首先我们先看一下,通过正常的登录自己的微信公众号,然后用文章搜索功能,搜索一下我们需要查找的相关文章。


  • 打开https://mp.weixin.qq.com

  • 登录公众号,打开素材管理,点击新建分享图文
    技术分享图片

  • 打开一个文章搜索接口
    技术分享图片

  • 输入要搜索的内容后,可以搜索到相关文章的标题、出自哪个公众号等信息。


2.实现思路




  • 这里有一个问题,打开微信公众平台首页,输入账号密码后需要使用管理的微信号扫码确认一下才能最终成功登录微信公众号,这个要怎么解决呢?



  • 我们可以第一次登录的时候按正常的流程输入账号密码,扫码登录,拿到COOKIEs,保存下来以便后面调用这个COOKIEs来验证登录;当然COOKIEs是有失效时间的,但是我在测试的时候好像过了3-4个小时还能用,够做好多事情了。



  • 基本思路:1.通过selenium驱动浏览器 打开登录页面 ,输入账号密码登录 ,获取登录后的COOKIEs,保存COOKIEs以便调用;2.拿到COOKIEs之后 ,去请求首页 登录后直接跳转到个人首页,打开文章搜索框,找一些需要的信息;3.拿到有用的信息后,构造data数据包 ,模拟post请求, 然后返回数据,拿到数据之后 ,解析出我们需要的数据。



3.获取COOKIEs,话不多说,贴个代码

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
from selenium import webdriver
import time
import json
driver = webdriver.Chrome() #需要一个谷歌驱动chromedriver.exe,要支持你当前谷歌浏览器的版本
driver.get(‘https://mp.weixin.qq.com/‘) #发起get请求打开微信公众号平台登录页面,然后输入账号密码登录微信公众号
driver.find_element_by_xpath(‘//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input‘).clear() #定位到账号输入框,清除里面的内容
driver.find_element_by_xpath(‘//*[@id="header"]/div[2]/div/div/form/div[1]/div[1]/div/span/input‘).send_keys(‘这里输入你的账号‘) #定位到账号输入框,输入账号
time.sleep(3) #等待3秒后执行下一步操作,避免因为网络延迟,浏览器来不及加载出输入框,从而导致以下的操作失败
driver.find_element_by_xpath(‘//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input‘).clear() #定位到密码输入框,清除里面的内容
driver.find_element_by_xpath(‘//*[@id="header"]/div[2]/div/div/form/div[1]/div[2]/div/span/input‘).send_keys(‘这里输入你的密码‘) #定位到密码输入框,输入密码
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath(‘//*[@id="header"]/div[2]/div/div/form/div[3]/label‘).click() #点击记住密码
time.sleep(3) #原因和以上相同
driver.find_element_by_xpath(‘//*[@id="header"]/div[2]/div/div/form/div[4]/a‘).click() #点击登录
time.sleep(15) #15秒内扫码登录
COOKIEs = driver.get_COOKIEs() #获取扫码登录成功之后的COOKIEs
print(COOKIEs) #打印出来看看,如果超时了还不扫码,获取到的COOKIEs是不完整的,不能用来登录公众号,所以第一次必须扫码登录以获取完整的COOKIEs
COOKIE = {} #定义一个空字典,以便把获取的COOKIEs以字典的形式写入
for items in COOKIEs: #把登录成功后获取的COOKIEs提取name和value参数写入空字典COOKIE
COOKIE[items.get(‘name‘)] = items.get(‘value‘)
with open(‘COOKIEs.txt‘,‘w‘) as file: #新建并打开一个COOKIEs.txt文件
file.write(json.dumps(COOKIE)) #写入转成字符串的字典
driver.close() #关闭浏览器

4.新建一个py文件,代码如下

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
import json
import re #正则模块
import random #随机数模块
import time
#query = ‘python‘
#读取之前登录后保存的COOKIEs
with open(‘COOKIEs.txt‘,‘r‘) as file:
COOKIE = file.read()
url = ‘https://mp.weixin.qq.com/‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36‘,
‘Referer‘: ‘https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&share=1&token=773059916&lang=zh_CN‘,
‘Host‘: ‘mp.weixin.qq.com‘,
}
COOKIEs = json.loads(COOKIE) #加载之前获取的COOKIEs
print(COOKIEs) #可以打印看看,和之前保存的COOKIEs是一样的
respOnse= requests.get(url, COOKIEs = COOKIEs) #请求https://mp.weixin.qq.com/,传COOKIEs参数,登录成功
token = re.findall(r‘token=(d+)‘,str(response.url))[0] #登录成功后,这是的url里是包含token的,要把token参数拿出来,方便后面构造data数据包发起post请求
#print(token)
#random.random()返回0到1之间随机数
#构造data数据包发起post请求
data = {
‘token‘: token,
‘lang‘: ‘zh_CN‘,
‘f‘: ‘json‘,
‘ajax‘: ‘1‘,
‘random‘: random.random(),
‘url‘: ‘python‘,
‘begin‘: ‘0‘,
‘count‘: ‘3‘,
}
search_url = ‘https://mp.weixin.qq.com/cgi-bin/operate_appmsg?sub=check_appmsg_copyright_stat‘ #按F12在浏览器里找post请求的url(搜索文章请求的url)
search_respOnse= requests.post(search_url, COOKIEs=COOKIEs, data=data, headers=headers) #发起post请求,传COOKIEs、data、headers参数
max_num = search_response.json().get(‘total‘) #获取所有文章的条数
num = int(int(max_num/3)) #每页显示3篇文章,要翻total/3页,不过实际上我搜索了几个关键词,发现微信公众号文章搜索的接口最多显示667页,其实后面还有页数,max_num/3的结果大于667没关系
if __name__ == ‘__main__‘:
query = input(‘请输入你要搜索的内容:‘)
begin = 0
while num +1 > 0:
print(begin)
data = {
‘token‘: token,
‘lang‘: ‘zh_CN‘,
‘f‘: ‘json‘,
‘ajax‘: ‘1‘,
‘random‘: random.random(),
‘url‘: query,
‘begin‘: ‘{}‘.format(str(begin)),
‘count‘: ‘3‘,
}
search_respOnse= requests.post(search_url, COOKIEs=COOKIEs, data=data, headers=headers)
cOntentt= search_response.json().get(‘list‘) #list里面是我们需要的内容,所以要获取list
for items in contentt: #具体需要list里面的哪些参数可以自己选择,这里只获取title、url、nickname、author
f = open(‘search.txt‘,mode=‘a‘,) #打开一个txt文档,把获取的内容写进去,mode=‘a‘是追加的方式写入,不覆盖
print(‘文章标题:‘,items.get(‘title‘)) #获取文章标题
f.write(‘文章标题:‘)
f.write(items.get(‘title‘))
f.write("
")
f.write(‘文章url:‘)
f.write(items.get(‘url‘))
f.write("
")
f.write(‘公众号:‘)
f.write(items.get(‘nickname‘))
f.write("
")
f.write(‘作者:‘)
f.write(items.get(‘author‘))
f.write("
")
f.write("
")
print(‘文章url:‘,items.get(‘url‘)) #获取文章的url
print(‘公众号:‘,items.get(‘nickname‘)) #获取出自哪个微信公众号
print(‘文章作者:‘,items.get(‘author‘)) #获取文章作者
num -= 1
begin = int(begin)
begin += 3
time.sleep(3)


  • 运行结果如下:

技术分享图片
技术分享图片



  • search.txt里保存的内容如下:

技术分享图片




  • 只要有一个微信公众号就可以实现,可以注册一个试一试。



推荐阅读
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • php支持中文文件名
    2019独角兽企业重金招聘Python工程师标准大家可能遇到过上传中文文件名的文件,或者读取中文目录时不能读取,出现错误的情况这种情况是因为php自动将中文字符转成了utf8 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • pythonMatplotlib(二)
    Matplotlib+pandas作图一、对csv文件进行提取ruixi.csv对上述表格进行提取并做图画出图像二、对.xlsx进行提取:rui ... [详细]
  • 笔记day2 ... [详细]
author-avatar
莫轻松
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有