微信公众号如何爬取历史文章呢?

2015-09-28 11:55:37 +08:00
 poisonbian

我有一个公众号,具体名称就不说了,免得有广告嫌疑..

当前有这样的需求:
根据用户发送的文章序号,或者是一段话,智能查找一些相关的历史文章,返回给用户

于是出现一个问题,我的历史文章地址如何获取呢?
抛砖引玉吧,我这边试过一些方法:

  1. 通过搜狗微信搜索,步骤是: 1) 查找公众账号 2) 用浏览器的 F12 debug 网络需求,找到接口地址(返回是一段 js 代码,里面包含了各个历史文章的图片地址,文章地址等内容) 3) 这个接口地址中,参数主要有 2 个,一个是 page(第几页),一个是随机时间戳,不需要任何头信息就能用 curl 获得 4) 解析这个接口返回的数据即可

那么这个方法存在的问题是:
1) 文章列表不全,不知道为什么,有的时候会漏掉一两篇文章,即使往后翻页也找不到
2) 最近搜狗对这个接口中的微信文章 url 做了加密,url 本来就是在微信平台中的 url,现在变成了搜狗自己跳转的 url,而这个 url 会做一些鉴权之类的,而且有时间限制,很快就过期了.
没仔细研究,但是觉得依赖它可能之后还会有问题,比如加密了的话,就会很被动.

  1. 微信本身提供了一个获得"永久素材"的接口 因为我的帐号的文章都是通过微信公众平台的图文素材功能来编辑群发的,所以,可以通过这个接口获得.

但是这个方法也存在问题:
1) 只要在素材中有,就会获得,哪怕这个文章还没有群发过
2) 这个接口获得的地址,和实际群发的地址不一样.例如群发之后,会有用户的阅读数和赞,还有评论等信息,还会有原创标识.但是这个接口来获得的是一个原始素材的预览页面,信息与群发后的这些信息都不同步,大家可以在微信里面打开和查看这两个地址,看看区别:

素材接口:
http://mp.weixin.qq.com/s?__biz=MjM5MTIwNzg2OQ==&mid=208228982&idx=1&sn=44ca5cd06dfbd34b1d664673d2d025a2&scene=4#wechat_redirect
群发地址:
http://mp.weixin.qq.com/s?__biz=MjM5MTIwNzg2OQ==&mid=208236246&idx=1&sn=b7b025c51e02a82ac6af6b18b0b1486c&scene=4#wechat_redirect

据我所知,有一些网站,是能够获得微信公众号文章的,甚至连一些点赞数,阅读数都能获得,比如传送门网站,更新很实时,文章也很全(所以不会是从搜狗接口来的).但是我和作者联系了一下,他表示不能透露实现方式(我也确实能理解...)

所以,现在我还是想看看,是否能够自己来实现这套逻辑,研究了一阵,一直没有什么思路.不知道各位大神是否可以帮忙,提供一些可行性的方案?

十分感谢!!!

7137 次点击
所在节点    微信
8 条回复
ToysMall
2015-09-28 12:43:47 +08:00
没那么复杂 微信本身有个历史消息页面 直接抓
oott123
2015-09-28 12:54:08 +08:00
qiayue
2015-09-28 13:26:47 +08:00
自己的号,良辰有 100 中方法去获取文章地址
别人的号,良辰就无能为力了
如你知道,告诉良辰,必有重谢
poisonbian
2015-09-28 14:07:17 +08:00
@ToysMall 微信的历史消息页面,url 地址会变哦,这个我也试过.主要是里面有类似 token 验证的机制,过段时间就变了,除非再有一种方式,可以用来动态获得历史消息页面的地址
poisonbian
2015-09-28 14:08:27 +08:00
@oott123 我文章里面已经说了,第一种方式就用的微信搜狗搜索,但是它也有缺陷
poisonbian
2015-09-28 14:14:41 +08:00
@qiayue 别人的号,肯定也有方式的,传送门网站就是一个例子,也看过其他几个网站,实现了这样的功能;那如果是自己的号,除了我提到的两种方法,还有其他方案提供不,请不吝赐教~
airyland
2015-09-28 14:16:20 +08:00
@qiayue 自己的号,良辰有 100 中方法去获取文章地址 +1

我是这样实现, chrome 写个插件每天打开后台时自动爬群发功能的已发送页面。理论上用账号模拟登录也可以采集到,但这是比较自然的方式,并且顺便也备份了所有用户的消息(默认只保存 5 天)方便后面分析。
oott123
2015-09-28 15:23:09 +08:00
啊 看走眼了= =
搜狗的就够用了…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/224203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX