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
wyzh97
V2EX  ›  Python

Python - Requests 爬虫 爬取亚马逊产品页, Headers 被识别为机器人

  •  
  •   wyzh97 · 2022-10-14 14:52:08 +08:00 · 4497 次点击
    这是一个创建于 769 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我试图抓取亚马逊的产品页面( https://www.amazon.com/dp/B0B6TR2GTJ), 代码如下:

    
    import requests
    
    url = "https://www.amazon.com/dp/B0B6TR2GTJ"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 
        'Accept-Language': 'en-US, en;q=0.5'
    }
    r= requests.get(url, headers = headers)
    
    print(r.status_code)
    print("-------------------")
    doc = pq(r.text)  
    
    print(doc("title"))
    print("-------------------")
    print(r.text)
    

    结果如下(被判断为机器人了): Headers 尝试了各种写法, 都是一样的结果.

    503
    -------------------
    <title>Sorry! Something went wrong!</title>
      
    -------------------
    <!--
            To discuss automated access to Amazon data please contact [email protected].
            For information about migrating to our APIs refer to our Marketplace APIs at https://developer.amazonservices.com/ref=rm_5_sv, or our Product Advertising API at https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html/ref=rm_5_ac for advertising use cases.
    -->
    <!doctype html>
    ......
    

    我爬虫还在初学阶段, 有没有前辈大神帮帮我. 万分感谢

    21 条回复    2022-10-15 16:27:34 +08:00
    kile
        1
    kile  
       2022-10-14 14:53:24 +08:00   ❤️ 5
    初学阶段为什么要去尝试顶级难度的电商爬虫...
    Kinnice
        2
    Kinnice  
       2022-10-14 14:57:10 +08:00
    我学会了 1+1=2 ,我要去解决哥德巴赫猜想了
    cy1027
        3
    cy1027  
       2022-10-14 15:06:16 +08:00
    简单一点的打开浏览器复制请求头,带上就行,复杂一点的点开 debugger ,找出关键 js ,通过 js 生成对应的 cookie 等参数,加入 headers 里面,再请求就可以了,如果亚马逊对 python 的请求指纹进行了识别,可以用 pycurl 进行请求,什么,你又问 pycurl 怎么用?先安装,再调用就行了!!!
    cy1027
        4
    cy1027  
       2022-10-14 15:13:13 +08:00
    @cy1027 当然了,有些 js 会加密,不会直接让你运行,专业点的说法就叫加壳了,这时你就需要脱壳,把 js 的龟壳脱下来,看看他的真容,然后他就会告诉你 cookie 怎么生成了,那么脱壳具体的步骤是什么呢?你可以化身人肉编译器,用眼睛编译一下 js ,在大脑中运行一部分,这时,js 会变成普通的 js 的样子,这个时候你就能认出哪个变量是干什么用的了,这个时候你会发现他的 js 对运行环境进行了检测,你要补充一下运行环境,欺骗一下这个 js ,它就会告诉你正确的 cookie 了
    fournoas
        5
    fournoas  
       2022-10-14 15:23:37 +08:00
    不行就用无头浏览器爬咯
    fbichijing
        6
    fbichijing  
       2022-10-14 16:23:31 +08:00
    2022-10-14 16:20:40 刚试了一下,headers 写全可以信息爬出来。
    ospider
        7
    ospider  
       2022-10-14 16:29:28 +08:00
    TLS ja3 指纹,你用 python 怎么也改不了的
    f165af34d4830eeb
        8
    f165af34d4830eeb  
       2022-10-14 16:29:34 +08:00   ❤️ 7
    westoy
        9
    westoy  
       2022-10-14 16:32:50 +08:00
    直接放弃

    这只是入门的无差别格挡

    之后还有限频、 随机变换页面规则、风控, 到这一步的时候你会发现你虽然爬到了数据, 但你不知道你爬到的数据是真的还是假的..........
    lambdaq
        10
    lambdaq  
       2022-10-14 16:42:28 +08:00
    问题是,你 python 代码本来就是机器人啊。别人识别的没毛病啊。
    pengtdyd
        11
    pengtdyd  
       2022-10-14 17:09:27 +08:00
    你这个水平还想爬电商网站,回去再练练吧。
    pepesii
        12
    pepesii  
       2022-10-14 17:15:22 +08:00
    可能你需要搜索下这些关键词,设备指纹,ja3 指纹,creepjs
    ian77729
        13
    ian77729  
       2022-10-14 17:36:29 +08:00
    puppeteer 和 selenium
    bobobruce
        14
    bobobruce  
       2022-10-14 17:45:48 +08:00
    chromedrive
    laravel
        15
    laravel  
       2022-10-14 19:21:02 +08:00
    这种限制多的最好用 puppeteer
    另外有需要 woocommerce 产品采集入库的联系我微信:gekongfei
    长期合作,价格优惠。
    p1956
        16
    p1956  
       2022-10-14 21:06:51 +08:00
    idm 就可以
    CrabAss
        17
    CrabAss  
       2022-10-14 21:42:41 +08:00
    初学就开始爬 Amazon ,OP 是个狠人
    Puteulanus
        18
    Puteulanus  
       2022-10-14 21:55:50 +08:00
    没那么夸张吧,之前做过 Amazon 的上货提醒,感觉和没设防差不多了都
    也可能现在变严了

    同一个 IP 扒多了可能遇到这个提示,会被拉黑一段时间,得换 IP
    dreamtrail
        19
    dreamtrail  
       2022-10-15 09:32:41 +08:00
    @Puteulanus
    你那是很久以前了吧,几年前我想弄个 ps5 的上货提醒,写了个简单的脚本就发现不行了
    wyzh97
        20
    wyzh97  
    OP
       2022-10-15 16:02:20 +08:00
    额, 这么多热心的朋友: 我网上看了下, 使用 Selenium 是比较方便的哈, 就是有点笨重, 我回头试一下 phantomJS 看能否搞定, 就是 CentOS 上布置起来可能有点费劲了
    blinkdr
        21
    blinkdr  
       2022-10-15 16:27:34 +08:00 via Android
    rpa 也行吧,虽然笨了点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:37 · PVG 10:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.