V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wjfz
V2EX  ›  问与答

豆瓣这个页面的反爬用了什么黑科技

  •  
  •   wjfz · 2020-12-22 16:27:33 +08:00 · 880 次点击
    这是一个创建于 1439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的情况:

    1 、在终端里直接 curl 不加任何参数是可以获取到的

    curl https://www.douban.com/doubanapp/h5/book/2567698/desc

    2 、Python requests 库获取不到

    3 、PHP curl 带上从 chrome 复制的全套 header 也获取不到。

    疑问的点

    1 、终端里不带参数为什么能请求到

    2 、用代码的方式不管怎样都请求不到,即使带了 chrome 能正常访问的全套 header

    import requests
    import os
    
    
    os.system('curl https://www.douban.com/doubanapp/h5/book/2567698/desc')
    
    url = 'https://www.douban.com/doubanapp/h5/book/2567698/desc'
    strhtml = requests.get(url)
    print(strhtml.text)
    
    manzhiyong
        1
    manzhiyong  
       2020-12-22 16:28:32 +08:00   ❤️ 1
    不能老实的用 selenium 吗
    fiveelementgid
        2
    fiveelementgid  
       2020-12-22 16:32:05 +08:00 via Android   ❤️ 1
    首先,终端不带参数还是还是有默认 Header 头的
    你用 curl -v 查查看
    maocat
        3
    maocat  
       2020-12-22 16:33:31 +08:00   ❤️ 1
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}

    requests.get(url,headers=headers) <Response [200]>
    requests.get(url) # <Response [418]>
    songjiaxin2008
        4
    songjiaxin2008  
       2020-12-22 16:34:48 +08:00   ❤️ 1
    curl 默认就是 curl 的 ua 哦
    songjiaxin2008
        5
    songjiaxin2008  
       2020-12-22 16:35:20 +08:00
    @maocat #3 正解,requests 包也有自己的默认 UA
    JetMac
        6
    JetMac  
       2020-12-22 16:41:27 +08:00
    418 I'm a teapot
    wjfz
        7
    wjfz  
    OP
       2020-12-22 16:42:50 +08:00
    @maocat 尴尬,用 PHP 的 curl 试了下不行就没用 Python 试着加 header 了。看来还是 PHP 的 curl 库不对劲。
    HFX3389
        8
    HFX3389  
       2020-12-22 16:44:15 +08:00   ❤️ 1
    requests 包默认的 UA 是:python-requests/{package version}
    wjfz
        9
    wjfz  
    OP
       2020-12-22 16:45:06 +08:00
    @fiveelementgid
    @maocat
    @songjiaxin2008
    @HFX3389

    请教一下,那我用 PHP 带了全套 header,包含 ua 和 cookie,依然是请求不到的,这有可能是什么原因
    wjfz
        10
    wjfz  
    OP
       2020-12-22 16:56:55 +08:00   ❤️ 1
    原因找到了,太愚蠢了,PHP 的 curl 是单独设置 ua 的,没在 header 数组里。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2157 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:04 · PVG 09:04 · LAX 17:04 · JFK 20:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.