这次写爬虫。我爬取了某个微信公众号的全部文章

  • 文章链接 url

  • 文章标题 title

  • 发布时间 update_time

  • 封面链接 cover

  • 阅读数 read_num

  • 在看数 like_num

若想直接拿代码来用,可以直接跳到最后。

首先要找到所有文章链接地址

一般来说,网上是搜不到某个公众号的全部文章的。但是我们利用 微信公众号平台 就能够一次性找到。

要用到它,肯定需要先注册登录一个微信公众号。当我们来到后台界面。

进入素材管理——> 新建图文——> (上方的)超链接界面


当我们打开开发者工具,搜索点击某个公众号后,就会抓到一个get请求包

它返回的就是文章相关的信息(包含了,文章链接,文章标题,创建时间,封面地址等)

因此找到请求后,我们开始构造

url 肯定是不变的 https://mp.weixin.qq.com/cgi-bin/appmsg
请求头复制粘贴过去

get请求的参数params也能直接进行复制

这里的begin代表的是页数,如果需要更多数据,肯定是需要翻页的。多次请求改变begin的值就可以了

第一部分的代码如下

import requests
import time
import datetime
import pytzurl="https://mp.weixin.qq.com/cgi-bin/appmsg"#我这里先把数据写入到txt文件中f=open("微信公众号文章.txt",mode="w",encoding="utf-8")
headers={#这里是你自己的headers
}
params={#这里是你自己的params
}
begin=0#发起第一次请求
resp=requests.get(url,headers=headers,params=params,verify=False)data = resp.json()
while True:time.sleep(5)#data['app_msg_list']里面装载的就是我们需要的数据if len(data['app_msg_list'])==0:#可能数据请求完了,可能请求失败,可能你的微信公众号请求被禁用一段时间(因为爬数据过于频繁,被发现了)breakfor app_msg in data['app_msg_list']:title = app_msg['title']  #文章标题link = app_msg['link']    #文章链接update_time=app_msg['update_time']   #文章创建时间,为时间戳#将时间戳转为 年月日,时分秒update_time = datetime.datetime.fromtimestamp(int(update_time), pytz.timezone('Asia/Shanghai')).strftime('%m/%d/%Y %H:%M:%S')  cover =app_msg['cover']  #文章封面图片地址#请求下一页的数据begin+=1params['begin']=begin*5resp = requests.get(url, headers=headers, params=params,verify=False)data = resp.json()
print(resp)

要值得注意的是,在第一步时候,如果请求过于频繁,Cookie会被服务器暂时封禁(自测是几十分钟)。每次请求之前间隔几秒休息,也不太好使。这时候就只能换一个公众号或者等个几十分钟。再次运行。(一次能抓60页左右的数据)

然后我们如何获取到文章的详细信息呢?包括阅读数,在看数

我们知道,从PC端微信里面,进入公众号后点击文章。下面会有阅读数,在看数等数据信息。直接从浏览器看文章的话是没有的。

因为PC端微信请求文章内容,附带了一些参数,是浏览器没有的。导致服务器那边没有返回这些实时数据(阅读数,在看数)

所有我们要用工具抓包。抓取微信在点开文章时发送的请求。

我这里使用的抓包工具是 Fiddler。官网下载地址为:
链接: Fidder抓包工具官网地址.
简单的使用我就不交了,能抓包就行。

监听的时候,我们随便点击我们要爬取的公众号的随便一篇文章

抓到了一个以** /mp/getappmsgext? ** 为POST提交的 url 地址。如下图

通过分析返回的response里面的json数据。就有我们的阅读数(read_num)和在看数(like_num)。如下图

当然要提取页面其它数据,都是可以的。

因此,我们根据该POST的请求信息,构造requests,就能拿到某一篇文章阅读数和在看数了。详细见如下代码

(提示!如果你想直接拿代码用,你自己需要弄到参数有5个)。

  • phoneCookie
  • uin
  • pass_ticket
  • appmsg_token
  • key
# 获取阅读数和点赞数
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 = 'MTcwMDU3OTA4Mg=='pass_ticket = 'FHAPWEyH4En5JI9SyHXcUtAfV1pxn/W/BMXpVnaOGQDhbD709+wejbXJCVLDGjvz'appmsg_token = '1130_Tml%2BYcZMk8oJAMuu6NYwpkTS-XtM-kz5LNJQv6N9AvC_sFfoc6dwKaHOYy4vNTEnvq7_bc6-HDgxo9mk'key = "7f92ccecf3278296917b0c74884016e74c45da721ac3a5c1f6895b2ea9a7a8f9f555af415fe9e63d2ed2ae943c7a643907e586cc622938b8d942055605523620b14d99c0368ea9a9202af4adf3311a1ebba37f6cb75b1041e84f02b59ae30e9ed498d996f66f75b9b7aa12403d117dd01f2f92c19b04e5aba3bcb669659551d0"# 目标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"]["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)

同样值得注意的是,在第二步的时候,我们也同样不能请求过于频繁,间隔几秒请求 没有问题。如果被禁用了,再次抓包即可。

这些一下来就能根据公众号的名称,获取到它下面的所有文章的详细信息。

如果写得不好的地方请指正,欢迎和我学习交流!

爬取微信公众号发布的所有文章(包括阅读数,在看数,点赞数)相关推荐

  1. python爬虫如何实现每天爬取微信公众号的推送文章

    python爬虫如何实现每天爬取微信公众号的推送文章 上上篇文章爬虫如何爬取微信公众号文章 上篇文章python爬虫如何爬取微信公众号文章(二) 上面的文章分别介绍了如何批量获取公众号的历史文章url ...

  2. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章

    下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...

  3. html如何获取请求头变量的值。_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  4. Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章

    前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  5. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  6. 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...

    9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 1. 本节目标 我们的主要目标是利用代理爬取微信公众号 ...

  7. Python 爬取微信公众号文章

    获取任何你想爬取的微信公众号文章 本程序通过输入关键字(如CSDN)就会获取到所有包含关键字(如CSDN)的公众号.在逐一获取所有公众号下所有文章.当然,这只是理想情况,腾讯的反爬不是一般的厉害,他会 ...

  8. 基于搜狗微信爬取微信公众号的文章

    1. 引入模块和函数 from requests_html import HTMLSession from urllib.parse import urlparse, parse_qs import ...

  9. python 微信公众号发文章_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

最新文章

  1. 工业4.0,人工智能狂潮正在席卷制造业 | 500强系列报告
  2. 全国计算机二级计基础题第十五套,计算机等级考试:二级VFP机试第15套
  3. CSMAR 智能财经报告分析平台帮助
  4. 微信公众号获取acess_token并存储(php)
  5. react 引入 mobx @babel/core: 7.2.2
  6. 发生心梗后,家属做些什么才能保证患者获救,降低死亡?
  7. .NET core ABP 获取远程IP地址
  8. 浅议化学与社会的关系——兼议绿色化学重要性
  9. 5G NR SSB概述
  10. 人工神经网络的算法原理,人工神经网络算法优点
  11. GeoServer发布OSM地图
  12. web项目连接阿里云云数据库RDS-MySQL8.0
  13. 平面解析几何----焦点弦上焦半径长度符合的条件1/AF+1/BF=2/ep
  14. One-Way Streets (oneway)
  15. 路径和(cdq分治)
  16. mysql数据库idb_数据库 - MysqliDb
  17. HDOJ3018欧拉路,几笔画判断
  18. 高薪程序员面试题精讲系列02之高薪面试经验分享
  19. python操作微信电脑版_PC端微信数据库解密Python版
  20. 1.计蒜客ACM题库.A1001 整除问题

热门文章

  1. 手机黑屏,但是按开机键有震动,能进系统,usb也能识别fastboot和rec(bl已解)
  2. PPT多张图片的融合插件
  3. 杰理AC692X学习-BLE与APP端发送与接收
  4. 从京东双11战报中,找到未来值得国产品牌看好的发展机遇
  5. CCSv5.3的安装
  6. 小黑leetcode清爽雨天之旅,刚吃完宇飞牛肉面、麻辣烫和啤酒:112. 路径总和
  7. webstorm常用插件 最后一个最好
  8. 2021届硕士生年初java春招实习面试和正式校招面试经验汇总(收割腾讯,百度,美团,网易等offer)
  9. SDN学习路径——SDN架构
  10. 基于Gstreamer和大疆OSDK4.0视频h264接口推流