RqPS6rhmP3Nyn3Tm
V2EX  ›  问与答

Python 爬 ehentai 发生了一些诡异的事情,特来求救

  •  
  •   RqPS6rhmP3Nyn3Tm · May 8, 2016 · 13416 views
    This topic created in 3683 days ago, the information mentioned may be changed or developed.

    本来我还在想, e 站直接把图片地址放在 html 里,连解析 JS 都省了,最多二十分钟搞定。现在想想,还是太年轻。

    因为发生了一些很奇怪的事情。

    • 墙内浏览器访问正常, Python 获取会报 connection reset by peer。我猜多半是墙的锅, ss 不方便断点调试我就挂了个 VPN ,果然错误没有了。很奇怪为什么浏览器不会 reset

    • 本来很快就写好了,挂 proxychains 测试的时候发现更诡异的事情,似乎 e 站会根据 IP 的不同返回不同的网页结构,比如这样 和这样的 ,不知道是什么原理。如果网页结构都会变的话,我也不知道怎么写 beautifulsoup 解析了……

    咳,代码挂在 这里,能帮忙看一下那就最好了。

    Supplement 1  ·  May 8, 2016
    网页结构会变的问题通过 iframe 的相对位置解决了,不过 connection reset 还是很奇怪,继续研究中
    28 replies    2016-05-09 02:03:25 +08:00
    UnisandK
        1
    UnisandK  
       May 8, 2016   ❤️ 1
    握爪,我之前也写过 e 绅士的爬虫
    写完才知道它家是有 API 的 https://ehwiki.org/wiki/API
    RqPS6rhmP3Nyn3Tm
        2
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016 via Android
    @UnisandK 大雾,折腾了这么久结果发现竟然有 API !!!

    不过这些诡异的错误还真不知道怎么解决
    RqPS6rhmP3Nyn3Tm
        3
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @UnisandK 不对,这 API 其实没啥用,给出的图片地址是缩略图的
    Bryan0Z
        4
    Bryan0Z  
       May 8, 2016 via Android
    我猜你用的国内浏览器,云端加速功能关了就不能正常打开了
    RqPS6rhmP3Nyn3Tm
        5
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @Bryan0Z 我用的是 chrome ,你看这这标志性的开发者工具
    vmebeh
        6
    vmebeh  
       May 8, 2016
    环境变量`http_proxy` `https_proxy` 可以设置代理
    RqPS6rhmP3Nyn3Tm
        7
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @vmebeh 其实代理不是问题,挂个 proxychains 就好了,关键是浏览器不会 connection reset 而网页结构会变让我感到很奇怪
    vmebeh
        8
    vmebeh  
       May 8, 2016
    F12 看一下请求头的 Remote Address 就知道浏览器是不是走了代理
    RqPS6rhmP3Nyn3Tm
        9
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @vmebeh 然而并没有, strange
    oott123
        10
    oott123  
       May 8, 2016 via Android
    你描述的这些现象,可能是由于 UA ,也可能是 Accept 头,也可能是 Accept-Language 头不同。
    RqPS6rhmP3Nyn3Tm
        11
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @oott123 我在想的是,即便是 chrome ,在配置不变的情况下,也会返回不同的网页结构,我猜也许和 UA 没有关系。
    这个问题我通过 iframe 的相对位置解决了,不过 connection reset 还是很诡异。
    slowman
        12
    slowman  
       May 8, 2016
    这不是代理或者网络的问题,楼上的答案都偏题了


    是 eheitai 前很久弄得 eheitai home 计划,为了分发图片的

    大概就是 p2p 那种,你也可以跑个作为图床,就会发现有图片下载下来了
    slowman
        13
    slowman  
       May 8, 2016
    Hentai@Home
    qnnnnez
        14
    qnnnnez  
       May 8, 2016 via Android
    没遇到过这样的问题,怀疑是 UA ?
    第一幅图少了 onclick ,这样一来 ajax 也没了,可能它觉得你禁用 js 了?
    RqPS6rhmP3Nyn3Tm
        15
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @1423 原来如此,这下就清楚了。话说我收不到你的回复提醒啊。

    @qnnnnez 看起来不是 UA 啊,楼上解释得蛮清楚了。
    qnnnnez
        16
    qnnnnez  
       May 8, 2016
    @BXIA 感觉不像。
    Hentai@Home 只是提供了图片而已,不会提供网页。无论图片是不是 h@h 提供的, html 应该是不会改变的,只是图片的 URL 会变。
    RqPS6rhmP3Nyn3Tm
        17
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @qnnnnez 同一个 Chrome ,我想应该不会改变 UA ,这样就很诡异了
    qnnnnez
        18
    qnnnnez  
       May 8, 2016
    @BXIA 有没有可能是代理服务器帮你改了下 Headers ?
    RqPS6rhmP3Nyn3Tm
        19
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @qnnnnez 我用的是自己的 SS ,应该不会。
    UnisandK
        20
    UnisandK  
       May 8, 2016   ❤️ 1
    @BXIA 之前触发回复频繁的限制了╮(╯_╰)╭,抱歉隔这么久才回

    官方文档写得比较烂,看看这个 https://github.com/tommy351/ehreader-android/wiki/E-Hentai-JSON-API


    API 虽然的确很不好用,但是借助它会比纯爬虫的方式实现好很多
    hanqi7012
        21
    hanqi7012  
       May 8, 2016 via Android
    h@h 是不是在国内不能运行了?
    Krime
        22
    Krime  
       May 8, 2016
    http://pan.baidu.com/s/1pLcQDHx
    两年前还在学校用.net 时写的了,目前还能用。源码在另一台笔记本上没拷出来,新电脑也懒得装 VS 了。
    qnnnnez
        23
    qnnnnez  
       May 8, 2016 via Android
    @hanqi7012 可以的,但是有可能下图片的时候被墙

    补充一下,略缩图页面的 H@H Downloader 链接提供一个文本文件,里面有一些信息
    RqPS6rhmP3Nyn3Tm
        24
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @UnisandK 感谢……明天研究一下,今天折腾这玩意实在是有点心累
    RqPS6rhmP3Nyn3Tm
        25
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016
    @UnisandK 哇靠,这 API 也太丑了吧,我都看不下去了
    zmj1316
        26
    zmj1316  
       May 8, 2016
    因为 eh 家有个 hath,相当于把图片分布到大量的用户机器上 serve 了,有可能你被分配到的那个 hath 用户的 ip 被墙了就 reset 了?
    RqPS6rhmP3Nyn3Tm
        27
    RqPS6rhmP3Nyn3Tm  
    OP
       May 8, 2016 via Android
    @zmj1316 不,是主站 reset
    so898
        28
    so898  
       May 9, 2016
    一整栋楼的绅士……虽然我也写过 ehentai 的抓取器……
    那时候就发现 ehentai 这货返回的 html 会有不一样的,之前还以为是浏览器插件,后来发现要固定 user-agent 来抓
    再后来尝试了浏览器插件来抓图……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4169 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 116ms · UTC 05:21 · PVG 13:21 · LAX 22:21 · JFK 01:21
    ♥ Do have faith in what you're doing.