V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
poisonbian
V2EX  ›  微信

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

  •  
  •   poisonbian · 2015-09-28 11:55:37 +08:00 · 7130 次点击
    这是一个创建于 3125 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    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

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

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

    十分感谢!!!

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

    我是这样实现, chrome 写个插件每天打开后台时自动爬群发功能的已发送页面。理论上用账号模拟登录也可以采集到,但这是比较自然的方式,并且顺便也备份了所有用户的消息(默认只保存 5 天)方便后面分析。
    oott123
        8
    oott123  
       2015-09-28 15:23:09 +08:00 via Android
    啊 看走眼了= =
    搜狗的就够用了…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3535 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:59 · PVG 18:59 · LAX 03:59 · JFK 06:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.