爬虫如何爬取微信公众号文章

下篇文章:python爬虫如何爬取微信公众号文章(二)
下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章
因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒是写过一些爬虫,但都是爬取网站数据,这次本来以为也会很容易,然而却遇到了不少麻烦,这里和大家分享一下。

1、利用爬虫爬取数据最基本的也是最重要的就是找到目标网站的url地址,然后遍历地址逐个或多线程爬取,一般后续的爬取地址主要通过两种方式获取,一是根据网页的分页,推算出url地址的规律,一般是后面跟着参数page=num,另一种就是筛选出当前页的<a href=“url”>标签,取出url作为后续的爬取地址。很遗憾,这两种方法在微信公众号里都无法使用,原因在于公众号的文章地址之间没有关联,无法通过一篇文章的地址找到所有的文章地址。

2、那我们该如何获取公众号的历史文章地址呢,一种方法是通过搜狗微信网站搜索目标公众号,可以看到最近的一篇文章,但也只是最近的一篇,无法获取历史文章,如果你想做每天的定时爬取,可以采用这种方法,每天爬取一篇。如图是这样的:
3、上面的当然不少我们需要的结果,所以我们还是要想办法把所以的历史文字获取到,废话少说,直切主题:

  • 首先你要注册一个微信公众号(订阅号),可以注册个人的,比较简单,步骤网上都有,这里不做介绍了。(如果之前有就不需要注册了)。
  • 注册好之后,登录微信公众平台,在首页的左边栏的管理下面,有一个素材管理,如图所示:
  • 点击素材管理,然后选择图文消息,再点击右侧的新建图文素材:
  • 跳转到新页面,点击顶部超链接:
  • 然后在弹窗里选择查找文章,输入你要爬取的公众号名称,然后搜索就可以啦:
  • 然后再点击搜索出来的公众号,就可以看到它的所有历史文章了:

4、找到历史文章后我们该如何写程序获取到所有的url地址呢?,首先我们来分析一下点击公众号名称的时候浏览器做了什么,调出检查页面,点击网络,先清除掉所有数据,然后点击目标公众号,可以看到下面界面:

点击那串字符串之后,然后点击headers:

找到General,这里的Request Url就是我们程序需要请求的地址格式,需要我们拼接出来,这里面的参数在下面的Query String Parameters里更加明了:

这些参数的意义很容易理解,唯一需要说明的是fakeid是公众号的唯一标识,每个公众号不一样,如果爬取其他公众号的,只需要更改这个参数就可以了。其中random可以省略。

另一个重要的部分是Request Headers,这里面包含cookie和User-Agent等重要的信息,在接下来的代码中都会用到:

5、上面分析完之后就可以开始写代码了。
首先需要的参数:

# 目标url
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"# 使用Cookie,跳过登陆操作
headers = {"Cookie": "ua_id=YF6RyP41YQa2QyQHAAAAAGXPy_he8M8KkNCUbRx0cVU=; pgv_pvi=2045358080; pgv_si=s4132856832; uuid=48da56b488e5c697909a13dfac91a819; bizuin=3231163757; ticket=5bd41c51e53cfce785e5c188f94240aac8fad8e3; ticket_id=gh_d5e73af61440; cert=bVSKoAHHVIldcRZp10_fd7p2aTEXrTi6; noticeLoginFlag=1; remember_acct=mf1832192%40smail.nju.edu.cn; data_bizuin=3231163757; data_ticket=XKgzAcTceBFDNN6cFXa4TZAVMlMlxhorD7A0r3vzCDkS++pgSpr55NFkQIN3N+/v; slave_sid=bU0yeTNOS2VxcEg5RktUQlZhd2xheVc5bjhoQTVhOHdhMnN2SlVIZGRtU3hvVXJpTWdWakVqcHowd3RuVF9HY19Udm1PbVpQMGVfcnhHVGJQQTVzckpQY042QlZZbnJzel9oam5SdjRFR0tGc0c1eExKQU9ybjgxVnZVZVBtSmVnc29ZcUJWVmNWWEFEaGtk; slave_user=gh_d5e73af61440; xid=93074c5a87a2e98ddb9e527aa204d0c7; openid2ticket_obaWXwJGb9VV9FiHPMcNq7OZzlzY=lw6SBHGUDQf1lFHqOeShfg39SU7awJMxhDVb4AbVXJM=; mm_lang=zh_CN","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
}data = {"token": "1378111188","lang": "zh_CN","f": "json","ajax": "1","action": "list_ex","begin": "0","count": "5","query": "","fakeid": "MzU5MDUzMTk5Nw==","type": "9",
}

根据自己的cookie和token进行更改,然后发送请求获取响应,去除每一篇文章的title和url,代码如下:

content_list = []
for i in range(20):data["begin"] = i*5time.sleep(3)# 使用get方法进行提交content_json = requests.get(url, headers=headers, params=data).json()# 返回了一个json,里面是每一页的数据for item in content_json["app_msg_list"]:    # 提取每页文章的标题及对应的urlitems = []items.append(item["title"])items.append(item["link"])content_list.append(items)

第一个for循环是爬取的页数,首先需要看好公众号的历史文章列表一共有多少页,这个数只能小于页数。更改data[“begin”],表示从第几条开始,每次5条,注意爬取不能够太多和太频繁,不然会被封ip封cookie,严重还会封公众号。

然后把title和url保存起来,如下:

name=['title','link']
test=pd.DataFrame(columns=name,data=content_list)
test.to_csv("XXX.csv",mode='a',encoding='utf-8')
print("保存成功")

完整程序如下:

# -*- coding: utf-8 -*-
import requests
import time
import csv
import pandas as pd# 目标url
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"# 使用Cookie,跳过登陆操作
headers = {"Cookie": "ua_id=YF6RyP41YQa2QyQHAAAAAGXPy_he8M8KkNCUbRx0cVU=; pgv_pvi=2045358080; pgv_si=s4132856832; uuid=48da56b488e5c697909a13dfac91a819; bizuin=3231163757; ticket=5bd41c51e53cfce785e5c188f94240aac8fad8e3; ticket_id=gh_d5e73af61440; cert=bVSKoAHHVIldcRZp10_fd7p2aTEXrTi6; noticeLoginFlag=1; remember_acct=mf1832192%40smail.nju.edu.cn; data_bizuin=3231163757; data_ticket=XKgzAcTceBFDNN6cFXa4TZAVMlMlxhorD7A0r3vzCDkS++pgSpr55NFkQIN3N+/v; slave_sid=bU0yeTNOS2VxcEg5RktUQlZhd2xheVc5bjhoQTVhOHdhMnN2SlVIZGRtU3hvVXJpTWdWakVqcHowd3RuVF9HY19Udm1PbVpQMGVfcnhHVGJQQTVzckpQY042QlZZbnJzel9oam5SdjRFR0tGc0c1eExKQU9ybjgxVnZVZVBtSmVnc29ZcUJWVmNWWEFEaGtk; slave_user=gh_d5e73af61440; xid=93074c5a87a2e98ddb9e527aa204d0c7; openid2ticket_obaWXwJGb9VV9FiHPMcNq7OZzlzY=lw6SBHGUDQf1lFHqOeShfg39SU7awJMxhDVb4AbVXJM=; mm_lang=zh_CN","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
}data = {"token": "1378111188","lang": "zh_CN","f": "json","ajax": "1","action": "list_ex","begin": "0","count": "5","query": "","fakeid": "MzU5MDUzMTk5Nw==","type": "9",
}content_list = []
for i in range(20):data["begin"] = i*5time.sleep(3)# 使用get方法进行提交content_json = requests.get(url, headers=headers, params=data).json()# 返回了一个json,里面是每一页的数据for item in content_json["app_msg_list"]:    # 提取每页文章的标题及对应的urlitems = []items.append(item["title"])items.append(item["link"])content_list.append(items)print(i)
name=['title','link']
test=pd.DataFrame(columns=name,data=content_list)
test.to_csv("xingzhengzhifa.csv",mode='a',encoding='utf-8')
print("保存成功")

最后保存的文件如图:

取到了每一篇文章的url,接下来就可以遍历进行爬取每一篇文章的内容了,关于爬取文章内容的部分将会在下一篇博客中介绍。


补充内容:
关于有小伙伴问到如何获取文章封面图和摘要的问题,检查浏览器时可以看到返回的json数据中包含很多信息,里面就有封面图和摘要

只需要 items.append(item[“digest”])就可以保存文章摘要了。其他字段如发布时间都可以获取。

关于获取阅读量和点赞数的问题,通过本问的方式是没办法获取的,因为网页打开公众号文章是没有阅读数和点赞数的,这个需要使用电脑版微信或手机版微信利用抓包工具获取。

关于ip代理,计算页数,多次保存的问题,我在我的公众号里的文章中介绍了,有需要的可以取看一下


爬虫如何爬取微信公众号文章相关推荐

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

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

  2. 【Python爬虫】爬取微信公众号文章信息准备工作

    有一天发现我关注了好多微信公众号,那时就想有没有什么办法能够将微信公众号的文章弄下来,而且还想将一些文章的精彩评论一起搞下来.参考了一些文章,通过几天的研究基本上实现了自己的要求,现在记录一下自己的一 ...

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

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

  4. python爬虫实战-爬取微信公众号所有历史文章 - (00) 概述

    http://efonfighting.imwork.net 欢迎关注微信公众号"一番码客"获取免费下载服务与源码,并及时接收最新文章推送. 最近几年随着人工智能和大数据的兴起,p ...

  5. 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台)

    首先表示抱歉,年底大家都懂的,又涉及SupportYun系统V1.0上线.故而第四篇文章来的有点晚了些~~~对关注的朋友说声sorry! SupportYun系统当前一览: 首先说一下,文章的进度一直 ...

  6. 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台)...

    首先表示抱歉,年底大家都懂的,又涉及SupportYun系统V1.0上线.故而第四篇文章来的有点晚了些~~~对关注的朋友说声sorry! SupportYun系统当前一览: 首先说一下,文章的进度一直 ...

  7. python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

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

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

  9. python爬取微信公众号文章(包含文章内容和图片)

    之前虽然做过网页爬取,但微信爬取一直没做过,因为我一直不知道网页可以进微信公众平台,只用过微信客户端进微信公众号.既然可以通过网页进微信公众平台,那么爬取微信公众号文章就流程上就没太多难度了. 自己在 ...

  10. python 爬取微信公众号文章(selenium+webdriver)

    """通过搜狗搜索中的微信搜索入口爬取微信公众号文章(selenium) """ import re import os import js ...

最新文章

  1. apache 2.4 配置php,Apache2.4 PHP 配置
  2. DL之决策树(Decision tree)
  3. 基于大数据审计的信息安全日志分析法
  4. 增强学习(三)----- MDP的动态规划解法
  5. 如何才能学好python编程零基础_Python脚本该怎么学,零基础也可以学好Python编程吗?...
  6. .NET 4.5 Task异步编程学习资料
  7. 如果你是壁纸控,高清图片这里找!
  8. 常用正则表达式锦集与Python中正则表达式的用法
  9. Java对象的序列化和反序列化实践
  10. JVM系列一:JVM内存组成及分配
  11. javascript 数组操作函数
  12. Oracle P6培训系列:02登录
  13. 【机器人学】正运动学详解
  14. c语言五子棋中怎么设置开局,五子棋开局口诀_五子棋常用的开局方式
  15. 怎么用电脑操控自己的手机 怎样用电脑控制手机?
  16. 2022年了,Windows Vista还能用吗?
  17. 华夏联盟社会工程技术学习
  18. mantis 邮件配置 linux,mantis安装与配置(Windows+Mysql+PHP+IIS)
  19. 网络工程属于计算机还是通信,通信工程属于计算机大类吗 哪个大类
  20. 6-1 单链表逆转 (20 分)

热门文章

  1. JAVA实现MD5算法、SHA1算法和SHA256算法
  2. mac 生成公私钥key
  3. 疫情期间,世界顶尖艺术学院-伦敦艺术大学开启教学新模式
  4. 手把手教你做短视频去水印微信小程序(4-解析结果页)
  5. psp开发------汉化插件
  6. [Book]《云计算核心技术剖析》读书笔记
  7. 云计算技术简述及发展分析
  8. game design原理系列学习笔记(四)
  9. 软件项目管理复习题库(学生自制非官方)
  10. 浅谈软件研发管理体系建设