python学习:爬虫爬取微信公众号数据
spider
- 一、获取链接
- 二、爬取文章标题、文章链接、文章正文、时间
- 三、爬取阅读量与点赞数
参考: https://blog.csdn.net/qq_45722494/article/details/120191233
一、获取链接
1、登录微信公众平台
- 这里我注册了个微信公众号
- 点击图文消息
- 点击超链接
- 搜索要爬取的公众号名称
- 获取appmsg?action…
二、爬取文章标题、文章链接、文章正文、时间
上述第一步可以获取到cookie、fakeid、token、user_agent等,编辑成wechat.yaml文件,如下所示
cookie : xxxx
fakeid : xxxx
token : xxxx
user_agent: xxxx
代码如下:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-import json
import requests
import time
import random
import yaml
import datetime
from bs4 import BeautifulSoupdef main():with open("wechat.yaml", "r") as file:file_data = file.read()config = yaml.safe_load(file_data)headers = {"Cookie": config['cookie'],"User-Agent": config['user_agent']}# 请求参数url = "https://mp.weixin.qq.com/cgi-bin/appmsg"begin = "0"params = {"action": "list_ex","begin": begin,"count": "5","fakeid": config['fakeid'],"type": "9","token": config['token'],"lang": "zh_CN","f": "json","ajax": "1"}# 存放结果app_msg_list = []# 在不知道公众号有多少文章的情况下,使用while语句# 也方便重新运行时设置页数with open("app_msg_list.csv", "w", encoding='utf-8') as file:file.write("seq,type,company,field,title,link,context,time\n")i = 0while True:begin = i * 5params["begin"] = str(begin)# 随机暂停几秒,避免过快的请求导致过快的被查到time.sleep(random.randint(1, 10))resp = requests.get(url, headers=headers, params=params, verify=False)print(resp.text)# 微信流量控制, 退出if resp.json()['base_resp']['ret'] == 200013:print("frequencey control, stop at {}".format(str(begin)))time.sleep(3600)continue# 如果返回的内容中为空则结束if len(resp.json()['app_msg_list']) == 0:print("all ariticle parsed")breakmsg = resp.json()if "app_msg_list" in msg:for item in msg["app_msg_list"]:text = getText(item['link'])date = datetime.datetime.fromtimestamp(item['create_time'])info = '"{}","{}","{}","{}","{}"'.format(str(item["aid"]), item['title'], item['link'], text, date)with open("app_msg_list.csv", "a", encoding='utf-8') as f:f.write(info + '\n')print(f"第{i}页爬取成功\n")print("\n".join(info.split(",")))print("\n\n---------------------------------------------------------------------------------\n")# 翻页i += 1def getText(url):response = requests.get(url)# 解析 HTMLsoup = BeautifulSoup(response.text, 'html.parser')# 获取文章正文article = soup.find('div', {'class': 'rich_media_content'})if article is not None:article = article.get_text()else:article = ""return articleif __name__ == '__main__':main()
三、爬取阅读量与点赞数
- 因为阅读量与点赞量是在上面抓取的链接中是没有的,必须要通过抓包获取一些参数
1、使用fiddler或Charles抓包
- 点击微信公众号
- 获取getappmsgext?..
2、获取包中的一些参数:
key:
uin:
pass_ticket:
3、代码实现
# 获取阅读数和点赞数
import requests
import timedef getMoreInfo(link):# 获得mid,_biz,idx,sn 这几个在link中的信息。mid = link.split("&")[1].split("=")[1]idx = link.split("&")[2].split("=")[1]sn = link.split("&")[3].split("=")[1]_biz = link.split("&")[0].split("_biz=")[1]#该4个参数,需要自己从抓的包里面的请求头里面去获取,uin = xxxxxxpass_ticket = xxxxxxkey = xxxxxx# 目标urlurl = "http://mp.weixin.qq.com/mp/getappmsgext"# 添加Cookie避免登陆操作。Cookie需要自己从抓的包里面去获取phoneCookie = "rewardsn=; wxtokenkey=777; wxuin=1700579082; lang=zh_CN; appmsg_token=1130_Tml%2BYcZMk8oJAMuu6NYwpkTS-XtM-kz5LNJQv6N9AvC_sFfoc6dwKaHOYy4vNTEnvq7_bc6-HDgxo9mk; devicetype=Windows10x64; version=63030532; pass_ticket=FHAPWEyH4En5JI9SyHXcUtAfV1pxn/W/BMXpVnaOGQDhbD709+wejbXJCVLDGjvz; wap_sid2=CIqO86oGEooBeV9IUGFHMElKRUJpdENjbGd0QWxxd0RDUHEwWm5IV1JTMlFDVExncGVuYnh1bmRwSUpxVHV6U1hCbG5JQXE1UTh5V3FlOUh1V0JPeUxwcFVrR3V0REZ0NGJGRHB2VVpqcS1Md3J6WHlsY3VPQzkzOHVWTlk4NDlmTFFjOFgzdDgwVGJrY1NBQUF+MOO54YkGOA1AAQ=="#这里的"User-Agent"最好为手机浏览器的标识headers = {"Cookie": phoneCookie,"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400"}# 添加data,`req_id`、`pass_ticket`。data = {"is_only_read": "1","is_temp_url": "0","appmsg_type": "9",'reward_uin_count': '0'}#根据获取到的参数,构造PSOT请求的paramsparams = {"__biz": _biz,"mid": mid,"sn": sn,"idx": idx,"key": key,"pass_ticket": pass_ticket,"appmsg_token": appmsg_token,"uin": uin,"wxtoken": "777",}#post请求提交后,将返回的respone转为jsonjson = requests.post(url, headers=headers, data=data, params=params).json()#获取到阅读数read_num=json['appmsgstat']['read_num']# 获取到点赞数like_num=json["appmsgstat"]["old_like_num"]print(read_num,like_num)#随便某一篇文章的url地址
url="http://mp.weixin.qq.com/s?__biz=MjM5Nzc5OTcxNA==&mid=2651014142&idx=1&sn=5f00452e553dad1f0621ca82b1a674bd&chksm=bd2391b38a5418a5dbcdeacbd738289fc8c421c7f0b125b97be21f65463b87d12d1c9ce75436#rd"
getMoreInfo(url)
python学习:爬虫爬取微信公众号数据相关推荐
- python爬虫爬取微信公众号小程序信息
python爬虫爬取微信公众号小程序信息 爬取内容 某汽车维修信息提供的维修店名称,地点以及电话(手机)号码 爬取步骤 啥也别管,先抓包看看,在这里,博主使用的抓包软件是charles 抓包:将网络传 ...
- python爬虫——爬取微信公众号的文章及图片
参考 爬取公众号所有文章 想要爬取微信公众号的所有文章,微信只有文章是有地址的,如何找到这个公众号的所有文章呢? 找到该公众号的链接 打开公众号平台,找到创作图文消息 这样就找到了微信号 打开检查模式 ...
- [python爬虫]爬取微信公众号
爬取微信公众号 微信公众号接口 使用的包 需要的三个文件(Account.cookie.list) 代码如下 显示结果 总 结 微信公众号接口 目前是个功能需要一个微信号并且允许网页微信登陆,我们就是 ...
- Python2.7爬虫——爬取微信公众号文章
今天跟着这篇博客抓取微信公众号文章练习了一下爬虫,运行成功.想和大家分享一下过程中出现的问题和解决方法. 运行环境 windows 7 + Pycharm2018 + Python 2.7 目录 目录 ...
- python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...
一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...
- python爬虫爬取微信_Python爬虫爬取微信公众号历史文章全部链接
因为朋友问我能不能找一下一个微信公众号的全部历史文章的链接,我就帮他弄了一下,通过百度和谷歌发现现在大家爬微信公众号的思路基本都是下面两种: 通过搜狗搜索微信公众号然后拿到链接 通过fiddler检测 ...
- python公众号文章爬虫_Python爬虫爬取微信公众号历史文章全部链接
因为朋友问我能不能找一下一个微信公众号的全部历史文章的链接,我就帮他弄了一下,通过百度和谷歌发现现在大家爬微信公众号的思路基本都是下面两种: 通过搜狗搜索微信公众号然后拿到链接 通过fiddler检测 ...
- python爬取公众号历史文章_Python爬虫爬取微信公众号历史文章全部链接
因为朋友问我能不能找一下一个微信公众号的全部历史文章的链接,我就帮他弄了一下,通过百度和谷歌发现现在大家爬微信公众号的思路基本都是下面两种: 通过搜狗搜索微信公众号然后拿到链接 通过fiddler检测 ...
- python爬取微信公众号_python使用webdriver爬取微信公众号
本文实例为大家分享了python使用webdriver爬取微信公众号的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- from selenium import we ...
最新文章
- 谷歌新深度学习系统可以促进放射科医生的发展
- 重磅:腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
- MDNICE使得你只需要关注内容
- 保存oracle数据之后乱码,Oracle保存中文数据和读取数据页面显示乱码解决方案
- L2-013 红色警报 并查集
- java7和java8切换_切换表达式到Java吗?
- 第七堂:NavigationController以及TabBarController
- Java LinkedList公共对象peek()方法(带示例)
- WebStorm 格式化代码 - 快捷键
- 自动注入、加载 properties 文件、scope 属性、单例设计模式
- freecplus框架-文件操作
- IIS设置HTTP To HTTPS
- dBeaver sql格式化配置-v1.5
- MDUI中Select初始化问题
- Spark面试题、答案
- ubuntu18.4解决问题: Installation failed. See log at /var/log/cuda-installer.log for details.
- 2021年了!!Xftp新手的下载和安装教程(超详细),以及演示了远程登录和远程文件传输
- 饥饿游戏[The Hunger Games]
- V4L2驱动详解 API翻译
- 店宝宝:巨头PK精品电商
热门文章
- 【從零開始學日文】#1 日語50音的發音和寫法簡單教學!(平假名篇)
- C++ web框架drogon 使用对象关系映射ORM(Object Relational Mapping)模式
- 显卡扩展坞 机器学习_可扩展的机器学习
- python shelve模块_Python中shelve模块的简单介绍(附示例)
- ng-zorro 走马灯滑过停止切换,以及切换速度
- Ansys SCADE Vision-感知算法鲁棒性分析测试工具
- OpenGL 3.2规范公布 NVIDIA再次首发驱动
- 2023愚人杯-Comedy
- 基于Arm Cortex-M0+的 MCU,ATSAMC21E18A-MUT 规格
- java基基基础知识