V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
slysly759
V2EX  ›  Python

爬取微信公众号所有文章的请教

  •  
  •   slysly759 · 2016-09-04 10:59:48 +08:00 · 10678 次点击
    这是一个创建于 3012 天前的主题,其中的信息可能已经有所发展或是发生改变。

    废话还是少说直接上代码:

    __biz=MzA3ODA5NjgyOA uin=MjM3ODE4ODcxMg key=7b81aac53bd2393d5e902e058ff64404320d0d6b983fca250613052da952e7f6dde8016098f3981acafbc9303e06c824a5b57c6263a326a2 f=json frommsgid=1000000024 count=10 uin=MjM3ODE4ODcxMg== key=7b81aac53bd2393d5e902e058ff64404320d0d6b983fca250613052da952e7f6dde8016098f3981acafbc9303e06c824a5b57c6263a326a2 pass_ticket=0BQ58qDwcrLcbBzA76wFjC%252F5aaJ1U%252BivLJww1CdAEfAyXVrtTqQ3mQcR7RpbTT2R wxtoken= x5=0 HTTP/1.1

    目前发现的规律如下:

    1. 不同公众号的_biz 不一样
    2. uin 是 user_ID 固定不变
    3. key 值前 16 位不变,算法规律没找到:和公众号无关,但是和时效有关,一个 key 只能有效十几分钟的样子
    4. pass_ticket 目前不变
    5. 后面几位一样

    目前的核心是找到 key 的生成算法,或者是获取实时跟新的 key 其次是快速找到_biz 每个公众号对应的商业 ID

    现在想问的是:大家对于这个 key 生成算法有过了解喵 或者可以实时获取的解决方案也行,其次就是如何快速获取商业 ID

    关于这个 key 自己的一点思考, key 有 112 位,发现和 16 32 64 常见加密算法是位数类似的,我发现 key 前十六位是不变的,那么就是找剩下的 96 位的规律。一个 key 可以获取不同公众号的文章列表,当十几分钟过后这个 key 就会发生改变,此时如果访问,则报错返回 no seesion 我思考这剩下的 96 位和 session 有关,而 session 我在抓包的时候发现有一个 sessionID 看了一下 一共是 64 位 还有剩下的 32 位 我怀疑他有一个时间戳 md5 加密 成 32 位拼凑起来。私以为服务器可能是如果用户登录则生成一个 session ID 如果 xx 时间没有接受请求,则更改时间戳,或者每隔 20 分钟(假如说蛤)跟新 session ID 并发送给客户端跟新其 cookie 并同时更新其时间戳 如果 session ID 和数据库中的不匹配则返回 no session 报错信息 如果获取到的加密时间戳和系统当前时间戳相差 20 分钟以上则报错(这个错误我没有试),期待大家能够指正.

    any advice will be appreciated, thx in advice.

    第 1 条附言  ·  2016-09-06 09:58:21 +08:00
    呵呵 还没发两天就被微信的人看见了 你们修复的可真快,另外,对于要爬搜狗的 答一些有的没的都没有 我自己已经探索出来了 果然有商业价值的东西是不能分享的。。。
    24 条回复    2016-10-17 21:23:52 +08:00
    phoneli
        1
    phoneli  
       2016-09-04 11:04:38 +08:00
    我比较好奇的是。楼主怎么获取那个 url 后面的参数的?我一直学不会。。。
    xiamx
        2
    xiamx  
       2016-09-04 11:10:04 +08:00
    如果 key 是服务端生成的话,就比较难了
    douglas1997
        3
    douglas1997  
       2016-09-04 11:10:07 +08:00 via iPhone
    mark.
    slysly759
        4
    slysly759  
    OP
       2016-09-04 11:10:54 +08:00
    @phoneli 利用了一点 MIMT 的知识 你懂得~
    Moker
        5
    Moker  
       2016-09-04 11:33:21 +08:00
    直接爬搜狗
    qiayue
        6
    qiayue  
       2016-09-04 11:39:31 +08:00
    @phoneli 公众号点开一篇文章,选择复制链接
    azh7138m
        7
    azh7138m  
       2016-09-04 12:13:36 +08:00
    不如去搜狗爬?
    Yinz
        8
    Yinz  
       2016-09-04 13:40:40 +08:00
    *MITM ?
    ykwlv
        9
    ykwlv  
       2016-09-04 13:51:51 +08:00
    @phoneli 直接微信 Mac 客户端什么的。。。就可以直接在浏览器里面打开公众号的文章
    oseau
        10
    oseau  
       2016-09-04 14:44:52 +08:00
    advice => advance
    slysly759
        11
    slysly759  
    OP
       2016-09-04 14:46:21 +08:00
    @oseau 不好意思最近发烧烧糊涂了 不过已经改不了了
    wisdom
        12
    wisdom  
       2016-09-04 21:21:45 +08:00
    爬搜狗最靠谱
    jccg90
        13
    jccg90  
       2016-09-05 10:07:34 +08:00
    没见过特别好的办法,不要求效率的话,开个模拟器用脚本模拟点每个文章,然后抓包。。。
    wobuhuicode
        14
    wobuhuicode  
       2016-09-05 10:12:51 +08:00
    同爬搜狗
    macwhirr
        15
    macwhirr  
       2016-09-06 17:59:49 +08:00
    两个小时抓取不少呢
    ql9075
        16
    ql9075  
       2016-09-08 16:04:32 +08:00
    @wobuhuicode 爬搜狗出来的链接,有时间限制,过期了就打不开
    gamecreating
        17
    gamecreating  
       2016-10-08 19:24:14 +08:00 via iPhone
    楼主找到 key 的生成算法了吗 求教
    beader
        18
    beader  
       2016-10-11 11:15:21 +08:00
    其实 key 的自动获取是整个环节中最容易的
    gamecreating
        19
    gamecreating  
       2016-10-13 20:53:06 +08:00
    @beader 需要通过 uid 来算出 key
    slysly759
        20
    slysly759  
    OP
       2016-10-14 07:22:33 +08:00 via Android
    @gamecreating 真的喵| ू•ૅω•́)ᵎᵎᵎ 我去试一试
    dersu
        21
    dersu  
       2016-10-17 19:25:52 +08:00
    @gamecreating uid?不能吧,我觉得新的 key 算法应该是加上 biz , timestamp 的一个签名。腾讯改算法前,我这边的采集程序稳定运行半年多了, 9 月瘫了后,到现在都没找出稳定的能大批量抓取的办法,老板都快骂死了,如果能知道 key 的算法就太好了
    gamecreating
        22
    gamecreating  
       2016-10-17 20:17:19 +08:00
    @dersu 厉害,,你们是公司运作么? PM 个地址观摩一下... 我倒是找到方法取了 正在写代码验证.
    dersu
        23
    dersu  
       2016-10-17 21:18:22 +08:00
    @gamecreating v2 上可以不能 PM 吧,至少以前不行,现在可以了?我们是公司,但这个也不是什么主要业务,就是一些创业公司和营销公司的数据是我们提供的,包括公众账户。观摩么。。公司的展示页面上比较简单,可能看不出什么,你邮件我吧,我给你看看 tei2ds#gmail ,探讨探讨
    slysly759
        24
    slysly759  
    OP
       2016-10-17 21:23:52 +08:00 via Android
    @dersu ⊙▽⊙
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5963 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.