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

搜狗微信的反爬虫策略又升级了

  •  2
     
  •   macken · 2015-10-10 11:15:57 +08:00 · 15697 次点击
    这是一个创建于 3338 天前的主题,其中的信息可能已经有所发展或是发生改变。

    继前不久升级反爬策略以后,又来了一次打升级,躺枪一片,非登陆情况下,新的策略使用了服务端生成验证串的方式,要破解很难,除非能破解加密算法了。大家有什么研究?

    35 条回复    2016-01-29 14:42:10 +08:00
    pc10201
        1
    pc10201  
       2015-10-10 13:13:35 +08:00
    用浏览器模拟,加大量代理 IP
    macroideal
        2
    macroideal  
       2015-10-10 13:17:46 +08:00
    道高一尺, 魔高一丈
    macken
        3
    macken  
    OP
       2015-10-10 13:24:19 +08:00
    @pc10201 不是模拟的问题
    ljcarsenal
        4
    ljcarsenal  
       2015-10-10 13:53:34 +08:00 via Android
    为什么都要做微信相关的爬取呢
    skip11
        5
    skip11  
       2015-10-10 13:53:52 +08:00
    1.登录
    2.模拟浏览器获取那个串

    我也是昨天才发现临时更新的算法
    macken
        6
    macken  
    OP
       2015-10-10 13:54:06 +08:00
    @ljcarsenal 好玩
    macken
        7
    macken  
    OP
       2015-10-10 13:55:16 +08:00
    @skip11 国庆期间更新的 登录是一个方法,那个串是与帐号相关的,获取以后再抓取数据成本太高了
    sohoer
        8
    sohoer  
       2015-10-10 13:58:40 +08:00
    我不知道是不是通过搜狗抓取,如果是那就是 ext 这个参数,这个参数会失效需要隔段时间获取一次
    skip11
        9
    skip11  
       2015-10-10 14:00:35 +08:00
    @macken 我有几天没看了,我是自己抓过来离线读,具体什么时候更新的不是很清楚,@sohoer,楼主应该说的就是 ext ,失效模拟一下就好了,目前还不难,不知道搜狗后续会更新什么手段
    Moker
        10
    Moker  
       2015-10-10 14:02:31 +08:00
    前端时间就不行了
    加代理 IP 和降低频率 目前估计只能这样
    macken
        11
    macken  
    OP
       2015-10-10 14:42:40 +08:00
    @sohoer @skip11 是 ext,怎么模拟?我试过用搜索的方式获得 ext ,但是这种方法太麻烦了
    johnsneakers
        12
    johnsneakers  
       2015-10-10 15:38:31 +08:00
    现在就是一个 302 而已,你多请求一次拿到 302 的地址就可以了
    johnsneakers
        13
    johnsneakers  
       2015-10-10 15:41:14 +08:00
    (PHP 版本)粘贴即可看到效果:

    $url = "http://weixin.sogou.com/websearch/art.jsp?sg=CBf80b2xkgbhjl0x-hNnSEuCKYJJPsg_h-OjrOxHjU_vFtJfSKnjpz19wNWA5ILUTtJveGGSfLC6VBIRlwc6srq5lrLZ5gXykqfIRjtZWiJm_nQjhF6DEb6_H-c9J_ZynM4JG0XEf_vu4a6BXqY6ow..&url=p0OVDH8R4SHyUySb8E88hkJm8GF_McJfBfynRTbN8wisH87qPWS2UFAFG9qAbOBeXY6RLCSg2kRDYt5ROwiYPFLvkvBrfA0sgKbswv_WSNpL5BYLq2cVN2huY78d2DfqLtelzlOATJZYy-5x5In7jJFmExjqCxhpkyjFvwP6PuGcQ64lGQ2ZDMuqxplQrsbk";
    echo sogou_weixin($url);


    function sogou_weixin($url) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($ch);
    $Headers = curl_getinfo($ch);
    curl_close($ch);
    if ($data != $Headers)
    return $Headers["url"];
    else
    return false;
    }
    macken
        14
    macken  
    OP
       2015-10-10 17:01:24 +08:00
    @johnsneakers 恩,这是上一次升级后出现的问题,这次升级增加了 ext 验证
    fishlee
        15
    fishlee  
       2015-10-10 17:18:57 +08:00 via Android
    还没试过这方法,有空搞搞看
    johnsneakers
        16
    johnsneakers  
       2015-10-10 18:10:02 +08:00   ❤️ 1
    @macken 我刚试了,是可以的
    macken
        17
    macken  
    OP
       2015-10-10 18:40:55 +08:00
    @johnsneakers 这种方式是可以拿到最终的文章 url 的,我遇到的问题是直接访问 http://weixin.sogou.com/gzh?openid=oIWsFtzDjnBIlyxXFCgp7hAApCeM 是无法访问的,必须是这种方式才可以访问 http://weixin.sogou.com/gzh?openid=oIWsFtzDjnBIlyxXFCgp7hAApCeM&ext=Uc8g8yaxQpH6htELFQfGDr3PzTLZg-34eXRrntsODlbP32F_9hAQlNM8VKlUG_IA url 里面的 ext 是刚加的验证机制
    yepinf
        18
    yepinf  
       2015-10-10 21:42:51 +08:00
    之前用 qwebkit 爬,一直很稳定
    换工作之后,就没继续做下去了
    icedx
        19
    icedx  
       2015-10-10 21:43:27 +08:00
    搜狗微信 是啥?
    blue7wings
        20
    blue7wings  
       2015-10-11 10:39:52 +08:00
    我在想, sogou 的微信数据是官方给的嘛。。。
    macken
        21
    macken  
    OP
       2015-10-11 11:03:07 +08:00
    @yepinf 估计悬了。。
    macken
        22
    macken  
    OP
       2015-10-11 11:03:40 +08:00
    @blue7wings 应该是的 腾讯也投资搜狗了
    macken
        23
    macken  
    OP
       2015-10-11 11:03:51 +08:00   ❤️ 1
    icedx
        24
    icedx  
       2015-10-11 14:16:40 +08:00
    @macken Thx
    cai314494687
        25
    cai314494687  
       2015-10-12 21:56:05 +08:00
    @johnsneakers 提示:当前请求已过期,请点击重新加载 是什么回事?
    johnsneakers
        26
    johnsneakers  
       2015-10-13 09:55:34 +08:00
    @cai314494687 url 地址换一个就好
    johnsneakers
        28
    johnsneakers  
       2015-10-13 10:56:06 +08:00
    @cai314494687 哦,我和你不一样。 我爬的是搜索页, 取搜索结果列表里面的 url
    bowbright
        29
    bowbright  
       2015-11-15 16:40:37 +08:00
    @skip11
    1.登录
    2.模拟浏览器获取那个串
    具体能展开说说么
    bowbright
        30
    bowbright  
       2015-11-15 16:52:08 +08:00
    @johnsneakers 实验了你的代码,取到的 data 好像现在不对了。
    <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>
    g080166
        31
    g080166  
       2016-01-11 15:46:31 +08:00
    请问这个问题后来有解决方案了吗?
    g080166
        32
    g080166  
       2016-01-11 15:47:10 +08:00
    搜狗一旦弄得多了,就让我输入验证码,已经被搞疯了,想问下有好心人提供下解决方案吗?
    ACzero
        33
    ACzero  
       2016-01-19 16:30:31 +08:00   ❤️ 1
    @g080166 搜狗对采集限制比较严格,用 ip 代理可以解决
    g080166
        34
    g080166  
       2016-01-21 11:26:18 +08:00
    @ACzero 谢谢你的回答。我想问下用 ip 代理的话,会不会不稳定?另外,搜狗微信方面是否对这部分代理 ip 进行甄别?
    ACzero
        35
    ACzero  
       2016-01-29 14:42:10 +08:00
    @g080166 可以去抓一些免费的代理 ip ,有不少都是每日或者每小时更新的,当然这些代理 ip 只有部分能用,提高采集频率就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:43 · PVG 03:43 · LAX 11:43 · JFK 14:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.