爬虫---爬取公众号内容

  前面写都是抓取一些网站上的数据,今天工作提前完成了,闲来无事写一篇如何抓取公众号数据。

爬取公众号

常见的爬取公众号有3种方法

1、通过抓包获取公众号数据(app端)

2、通过抓包获取公众号数据(PC端)

3、通过搜狗搜索公众号(目前只能显示前10篇文章)

今天写的是通过抓取PC端数据获取公众号内容。

抓取思路

1、选择需要抓取的公众号链接

通过PC端微信选择需要抓取的公众号

2、分析公众号数据格式

通过fiddler查看请求信息

发现我们请求的地址为:https://mp.weixin.qq.com/mp/profile_ext? 后面的为参数

这里会引入一个新的知识点Ajax。

通过分析数据得到(如何分析Ajax方法,下一篇单独写)

__biz : 用户和公众号之间的唯一id,

uin :用户的私密id

key :请求的秘钥,一段时候只会就会失效。

offset :数量

count :每次请求的条数

3、通过requests请求获取数据

import requests
# 请求地址
url = ‘https://mp.weixin.qq.com/mp/profile_ext?‘
# 添加请求头
headers = {
            ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36‘
}
# 请求参数
params={
  ‘__biz‘: ‘MjM5NDAwMTA2MA==‘,
        ‘uin‘: ‘MTczODIyNzg3Nw==‘,
        ‘key‘: ‘f0a7c0779e79e92b25b1a3f8779ec559b50f247ff4dd1ece070c17dd08d9dbdc602bbd8c5837e4b68c252507ac45796c2f928b87d1cdfdbd2852c1b48f9e019806524a1c8d633b8886c30d48f6a82a8c‘,
        ‘offset‘: 0,
        ‘count‘: 10,
        ‘action‘: ‘getmsg‘,
        ‘f‘: ‘json‘
}
# 获取请求的json格式
r = requests.get(url,headers=headers,params=params,verify = False).json()

4、解析请求数据获取我们想要内容

下图为我们想要的数据公众号的名称,链接,图片等

通过json格式解析返回的json数据,拿到我们想要的数据

msg_list = json.loads(r[‘general_msg_list‘])
list = msg_list.get(‘list‘)
for i in list:
    info_list = i[‘app_msg_ext_info‘]
    # 获取标题
    title = info_list[‘title‘]
    print(title)
    # 链接
    content_url = info_list[‘content_url‘]
    print(content_url)
    #发布时间
    datetime_list = i[‘comm_msg_info‘][‘datetime‘]
    datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime_list))
    print(datetime)

请求结果:获取到了公众号的标题,公众号好的链接,公众号号的发布时间

这个地方也可以通过模拟url链接信息,然后获取全部数据,也可以再次请求公众号详情数据获取公众号发布的内容

5、分析分页规律,获取全部公众号全部文章信息

通过分析发现控制分页的的是 offset 和 count 两个参数,通过观察发现规律,获取全部连接数据

# 这里模拟抓取5页的数据
for i in range(0,5):
    print(‘开始抓取第%s页数据‘%(i+1))
    params={
      ‘__biz‘: ‘MjM5NDAwMTA2MA==‘,
            ‘uin‘: ‘MTczODIyNzg3Nw==‘,
            ‘key‘: ‘f0a7c0779e79e92b25b1a3f8779ec559b50f247ff4dd1ece070c17dd08d9dbdc602bbd8c5837e4b68c252507ac45796c2f928b87d1cdfdbd2852c1b48f9e019806524a1c8d633b8886c30d48f6a82a8c‘,
            ‘offset‘: (i*10)+122,
            ‘count‘: (i*10)+10,
            ‘action‘: ‘getmsg‘,
            ‘f‘: ‘json‘
    }

实例代码

# coding:utf-8
import requests
import json
import urllib3
import time
urllib3.disable_warnings()
# 请求地址
url = ‘https://mp.weixin.qq.com/mp/profile_ext?‘
# 添加请求头
headers = {
            ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36‘
}
# 请求参数
for i in range(0,5):
    print(‘开始抓取第%s页数据‘%(i+1))
    params={
      ‘__biz‘: ‘MjM5NDAwMTA2MA==‘,
            ‘uin‘: ‘MTczODIyNzg3Nw==‘,
            ‘key‘: ‘f0a7c0779e79e92b25b1a3f8779ec559b50f247ff4dd1ece070c17dd08d9dbdc602bbd8c5837e4b68c252507ac45796c2f928b87d1cdfdbd2852c1b48f9e019806524a1c8d633b8886c30d48f6a82a8c‘,
            ‘offset‘: (i*10)+122,
            ‘count‘: (i*10)+10,
            ‘action‘: ‘getmsg‘,
            ‘f‘: ‘json‘
    }
    # 获取请求的json格式
    r = requests.get(url,headers=headers,params=params,verify = False).json()
    msg_list = json.loads(r[‘general_msg_list‘])
    list = msg_list.get(‘list‘)
    for i in list:
        info_list = i[‘app_msg_ext_info‘]
        # 获取标题
        title = info_list[‘title‘]
        print(title)
        # 链接
        content_url = info_list[‘content_url‘]
        print(content_url)
        #发布时间
        datetime_list = i[‘comm_msg_info‘][‘datetime‘]
        datetime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(datetime_list))
        print(datetime)

感觉写的对您有帮助的话,点个关注,持续更新中~~~~坚持每天学习2小时

原文地址:https://www.cnblogs.com/qican/p/11271760.html

时间: 2024-08-30 05:18:56

爬虫---爬取公众号内容的相关文章

java爬虫爬取的html内容中空格( )变为问号“?”的解决方法

用java编写的爬虫,使用xpath爬取内容后,发现网页源码中的 全部显示为?(问号),但是使用字符串的replace("?", ""),并不能替换,网上找了一下,大概意思是显示的这个问号其实并不是问号,是乱码,主要是由于编码的问题导致的. 解决方法如下: //替换抓取内容中“ ”变为问号的问题 try { intro = new String(intro.getBytes(),"GBK").replace('?', ' ').replace('

爬取微信公众号内容——绘制词云

写在前面的话 前段时间写了一篇通过搜狗引擎获取微信公众号的文章,最近又看了一个网易云歌词绘制词云的程序 然后我就想,能否把这两者结合起来呢 还好经历几多波折终于把这个东西给弄出来了. 其实中间的实现不是很难, 关键是环境搭建实在是太困难了 好了,先把代码以及效果图奉献上吧 代码 weixin_spider.py #!/usr/bin/python # coding: utf-8 #这三行代码是防止在python2上面编码错误的,在python3上面不要要这样设置 import sys reloa

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

python爬虫爬取QQ说说并且生成词云图,回忆满满!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句. Python支持命令式程序设计.面向对象程序设计.函数式编程.面向切面编程.泛型编程多种编程范式.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收

Python编写网页爬虫爬取oj上的代码信息

OJ升级,代码可能会丢失. 所以要事先备份. 一开始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启发和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 python2.7版本, 试了一下修改到3.0版本, 要做很多包的更替,感觉比较烦,所以索性就在这个2.7版本上完善了. 首先观赏一下原始代码,我给加了一些注释: # -*- coding: cp936 -*- import urllib2 import urllib import re import

Node.js爬虫-爬取慕课网课程信息

第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让我们方便的操作HTML,就像是用jQ一样 开始前,记得 npm install cheerio 为了能够并发的进行爬取,用到了Promise对象 //接受一个url爬取整个网页,返回一个Promise对象 function getPageAsync(url){ return new Promise(

如何防止网站被爬虫爬取的几种办法

如何防止网站被爬虫爬取的几种办法 小 中 大 chen 2013-10-08 23:26 Linux 547 次浏览 抢沙发 今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢. 对于如何防止网站被爬取,我想从以下几种方法去分析: 1.基于程序本身去防止爬取:作为爬虫程序,爬取行为是对页面的源文件爬取,如爬取静态页面的html代码,可以用jquery去模仿写h

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

如何使用robots禁止各大搜索引擎爬虫爬取网站

ps:由于公司网站配置的测试环境被百度爬虫抓取,干扰了线上正常环境的使用,刚好看到每次搜索淘宝时,都会有一句由于robots.txt文件存在限制指令无法提供内容描述,于是便去学习了一波 1.原来一般来说搜索引擎爬取网站时都会,先读取下robots.txt文件,并依照里面所设定的规则去爬取网站(当然是指没用登录限制的页面) 2.下面我们就来说一说如何设置robots.txt文件 1).robots.txt文件必须是放在文件根目录上: 例如: ├─admin │  └─templates │