querylist采集微信公众号文章(如何实现每天爬取微信公众号的推送文章(二))

优采云 发布时间: 2021-12-02 01:09

  querylist采集微信公众号文章(如何实现每天爬取微信公众号的推送文章(二))

  Part 2文章:python爬虫如何抓取微信公众号文章(二)

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

  因为最近在法庭实习,需要一些公众号资料,然后做成网页展示,方便查看。之前写过一些爬虫,但都是爬网站数据。这次觉得太容易了,但是遇到了很多麻烦,在这里分享给大家。

  1、 使用爬虫爬取数据最基本也是最重要的就是找到目标网站的url地址,然后遍历地址一个一个或者多个爬取线程。一般后续的爬取地址主要是通过两种方式获取,一种是根据页面分页计算url地址的规律,通常后跟参数page=num,另一种是过滤掉标签取当前页面的url作为后续的爬取地址。遗憾的是,这两种方法都不能在微信公众号中使用。原因是公众号的文章地址之间没有关联,不可能通过文章的地址找到所有的文章@。 >地址。

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

  3、当然需要的结果还有很多,所以还是得想办法把所有的历史文本都弄出来,废话少说,切入正题:

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

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

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

  转到新页面并单击顶部的超链接:

  然后在弹出的窗口中选择Find文章,输入你要爬取的公众号名称,搜索:

  然后点击搜索到的公众号,可以看到它的全部历史记录文章:

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

  点击字符串后,再点击标题:

  找到将军。这里的Request Url就是我们的程序需要请求的地址格式。我们需要把它拼接起来。里面的参数在下面的Query String Parameters里面比较清楚:

  这些参数的含义很容易理解。唯一需要说明的是,fakeid 是公众号的唯一标识。每个公众号都不一样。如果爬取其他公众号,只需要修改这个参数即可。随机可以省略。

  另外一个重要的部分是Request Headers,里面收录了cookie、User-Agent等重要信息,在下面的代码中会用到:

  5、 经过以上分析,就可以开始写代码了。

  需要的第一个参数:

  #目标urlurl = "./cgi-bin/appmsg"#使用cookies,跳过登录操作headers = {"Cookie": "ua_id=YF6RyP41YQa2QyQHAAAAAGXPy_he8M8KkNCUbRx0cVU=; pgv_pvi=232_5880d9800000; = 3231163757;门票= 5bd41c51e53cfce785e5c188f94240aac8fad8e3; TICKET_ID = gh_d5e73af61440;证书= bVSKoAHHVIldcRZp10_fd7p2aTEXrTi6; noticeLoginFlag = 1; remember_acct = mf1832192%; data_bizuin = 3231163757; data_ticket = XKgzAcTceBFDNN6cFXa4TZAVMlMlxhorD7A0r3vzCDkS ++ pgSpr55NFkQIN3N + / v; slave_sid = bU0yeTNOS2VxcEg5RktUQlZhd2xheVc5bjhoQTVhOHdhMnN2SlVIZGRtU3hvVXJpTWdWakVqcHowd3RuVF9HY19Udm1PbVpQMGVfcnhHVGJQQTVzckpQY042QlZZbnJzel9oam5SdjRFR0tGc0c1eExKQU9ybjgxVnZVZVBtSmVnc29ZcUJWVmNWWEFEaGtk; slave_user = gh_d5e73af61440; XID = 93074c5a87a2e98ddb9e527aa204d0c7; openid2ticket_obaWXwJGb9VV9FiHPMcNq7OZzlzY = lw6SBHGUDQf1lFHqOeShfg39SU7awJMxhDVb4AbVXJM =; mm_lang = zh_CN的 “” 用户代理 “:” 的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,里面收录content_json["app_msg_list"]中item每页的数据:#提取每页的标题和对应文章@ > url items = [] items.append(item["title"]) items.append(item["link"]) content_list.append(items)

  第一个 for 循环是抓取的页面数。首先需要看好公众号文章列表中的总页数。这个数字只能小于页数。更改数据["begin"],表示从前几条开始,每次5条,注意爬取太多和太频繁,否则会被ip和cookies拦截,严重的会被公众号被屏蔽了。

  然后按如下方式保存标题和网址:

  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# Target urlurl = "./cgi-bin/appmsg"# 使用cookies跳过登录操作 headers = { “曲奇”:“ua_id = YF6RyP41YQa2QyQHAAAAAGXPy_he8M8KkNCUbRx0cVU =; pgv_pvi = 2045358080; pgv_si = s4132856832; UUID = 48da56b488e5c697909a13dfac91a819; bizuin = 3231163757;门票= 5bd41c51e53cfce785e5c188f94240aac8fad8e3; TICKET_ID = gh_d5e73af61440;证书= bVSKoAHHVIldcRZp10_fd7p2aTEXrTi6; noticeLoginFlag = 1; remember_acct = mf1832192%40smail.nju。 ; data_bizuin = 3231163757; data_ticket = XKgzAcTceBFDNN6cFXa4TZAVMlMlxhorD7A0r3vzCDkS ++ pgSpr55NFkQIN3N + / v; slave_sid = bU0yeTNOS2VxcEg5RktUQlZhd2xheVc5bjhoQTVhOHdhMnN2SlVIZGRtU3hvVXJpTWdWakVqcHowd3RuVF9HY19Udm1PbVpQMGVfcnhHVGJQQTVzckpQY042QlZZbnJzel9oam5SdjRFR0tGc0c1eExKQU9ybjgxVnZVZVBtSmVnc29ZcUJWVmNWWEFEaGtk; slave_user = gh_d5e73af61440; XID = 93074c5a87a2e98ddb9e527aa204d0c7; openid2ticket_obaWXwJGb9VV9FiHPMcNq7OZzlzY = lw6SBHGUDQf1lFHqOeShfg39S U7awJMxhDVb4AbVXJM =; 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,里面是item中的每个页面的数据content_json["app_msg_list"]: # 提取每个页面的标题文章和对应的url items = [] items.

  append(item["title"]) 项。追加(项目[“链接”])内容列表。 append(items) print(i)name=["title","link"]test=pd.数据帧(列=名称,数据=内容列表)测试。 to_csv("xingzhengzhifa.csv",mode="a",encoding="utf-8")print("保存成功")

  最后保存的文件如图:

  获取每个文章的url后,就可以遍历爬取每个文章的内容。爬取文章内容的部分将在下面的博客中介绍。

  补充内容:

  关于如何从小伙伴那里获取封面图片和摘要的问题,查看浏览器可以看到返回的json数据中收录了很多信息,包括封面图片和摘要

  只需要 items.append(item["digest"]) 来保存 文章 摘要。其他字段如发布时间可获取。

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

  关于ip代理,统计页数,多次保存,我在公众号文章中介绍过,有需要的可以看看

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线