下篇文章:python爬虫如何爬取微信公众号文章(二)

下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章

因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒是写过一些爬虫,但都是爬取网站数据,这次本来以为也会很容易,然而却遇到了不少麻烦,这里和大家分享一下。

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

2、那我们该如何获取公众号的历史文章地址呢,一种方法是通过搜狗微信网站搜索目标公众号,可以看到最近的一篇文章,但也只是最近的一篇,无法获取历史文章,如果你想做每天的定时爬取,可以采用这种方法,每天爬取一篇。如图是这样的:

3、上面的当然不少我们需要的结果,所以我们还是要想办法把所以的历史文字获取到,废话少说,直切主题:

首先你要注册一个微信公众号(订阅号),可以注册个人的,比较简单,步骤网上都有,这里不做介绍了。(如果之前有就不需要注册了)。

注册好之后,登录微信公众平台,在首页的左边栏的管理下面,有一个素材管理,如图所示:

点击素材管理,然后选择图文消息,再点击右侧的新建图文素材:

跳转到新页面,点击顶部超链接:

然后在弹窗里选择查找文章,输入你要爬取的公众号名称,然后搜索就可以啦:

然后再点击搜索出来的公众号,就可以看到它的所有历史文章了:

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

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

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

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

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

5、上面分析完之后就可以开始写代码了。

首先需要的参数:

# 目标urlurl = "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*5 time.sleep(3) # 使用get方法进行提交 content_json = requests.get(url, headers=headers, params=data).json() # 返回了一个json,里面是每一页的数据 for item in content_json["app_msg_list"]: # 提取每页文章的标题及对应的url items = [] 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 requestsimport timeimport csvimport pandas as pd# 目标urlurl = "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*5 time.sleep(3) # 使用get方法进行提交 content_json = requests.get(url, headers=headers, params=data).json() # 返回了一个json,里面是每一页的数据 for item in content_json["app_msg_list"]: # 提取每页文章的标题及对应的url items = [] 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代理,计算页数,多次保存的问题,我在我的公众号里的文章中介绍了,有需要的可以取看一下

python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章相关推荐

  1. anyproxy批量自动采集微信公众号文章

    我从2014年就开始做微信公众号内容的批量采集,最开始的目的是为了做一个html5的垃圾内容网站.当时垃圾站采集到的微信公众号的内容很容易在公众号里面传播.当时批量采集特别好做,采集入口是公众号的历史 ...

  2. 微信公众号开发——微信获取、操作公众号文章

    微信获取,操作公众号文章 项目地址:https://gitee.com/wrzhxy/wx_article 我以为微信支付和微信企业付款文档就够坑爹了,直到我遇到了微信获取公众号文章... 微信获取公 ...

  3. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  4. python爬虫(17)爬出新高度_抓取微信公众号文章(selenium+phantomjs)

    个人博客请访问 http://www.x0100.top 一.思路分析 目前所知晓的能够抓取的方法有: 1.微信APP中微信公众号文章链接的直接抓取(http://mp.weixin.qq.com/s ...

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

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

  6. python爬虫搜特定内容的论文_python爬取指定微信公众号文章

    python怎么抓取微信阅清晨的阳光比不上你的一缕微笑那么动人,傍晚的彩霞比不上你的一声叹息那么心疼,你的一个个举动,一句句话语都给小编带来无尽的幸福. 抓取微信公众号的文章 一.思路分析 目前所知晓 ...

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

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

  8. python爬虫爬取公众号_[Python]爬取微信公众号文章

    [Python] 纯文本查看 复制代码import sys reload(sys) sys.setdefaultencoding('utf-8') from urllib import quote f ...

  9. Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息

    少年最好的地方就是:虽然嘴上说要放弃,心底却总会憋着一口气.--刘同 文章目录 一.需求和网页分析 二.selenium爬虫 一.需求和网页分析 URL:https://weixin.sogou.co ...

最新文章

  1. windows 7架设OpenSSH服务器实践
  2. 深圳网络推广是如何提高网站的收录比的?
  3. Atom编辑Markdown文件保存后行尾的空格自动消失的问题解决
  4. intellij idea 怎么全局搜索--转
  5. HBase API 详细例子(封装的DAO类)
  6. opencv (一) 学习通过OpenCV图形界面及基础
  7. git-版本控制介绍
  8. MobileNet论文笔记
  9. Git 基础(九)—— Failed to push some refs to git
  10. Flex全局错误处理/Global Error Handling in AIR 2.0 and Flash 10.1
  11. 【android自定义控件】LinearLayout定义ActionBar样式
  12. 关于计算机文献检索报告,计算机专业文献检索论文参考选题.doc
  13. SecureCRT 中文(附上1.解决SecureCRT乱码问题2.解决Hostname lookup failed: host not found问题)
  14. iOS 获取设备UDID
  15. 在谷歌下面打开之后显示金山毒霸页面
  16. 前端面试题,速看webP,把握住网页提速小细节!亲测可用!
  17. 为什么我推荐你使用中国移动的九天 · 毕昇云GPU平台
  18. Linux中禁用命令历史记录
  19. (Crypto必备干货)详细分析目前NFT的几大交易市场
  20. 【秋招面经】金山前端题目总结

热门文章

  1. 出轨后身体留下的六个特征
  2. kindle_Kindle颂歌
  3. 脸上不同位置长痘痘的原因
  4. Ubuntu系统搭建PPPoE服务器,Ubuntu上架设PPPoE Server
  5. JAVA|什么是Sdkman
  6. SQL Server numeric数据类型
  7. numeric比较大小 数据库_SQL中NUMERIC和DECIMAL的区别
  8. 解决CCS闪退问题(亲测有效)
  9. G1垃圾回收器详细解读
  10. poi中excel锁定行列问题