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

requests 请求京东商品搜索页返回登录页面问题

  •  
  •   joyc · 2019-03-03 00:23:56 +08:00 · 5402 次点击
    这是一个创建于 2085 天前的主题,其中的信息可能已经有所发展或是发生改变。

    打算爬一下京东搜索页面的商品列表信息,却发现返回的是个重定向登录页面? 请问这是怎么回事?不登录用 chrome 是可以看到正常商品列表信息的。 代码 demo 如下:

    >>> import requests
    >>> url = 'https://search.jd.com/Search?keyword=9787208151550'
    >>> html_data = requests.get(url).text
    >>> html_data
    "<script>window.location.href='https://passport.jd.com/uc/login'</script>"
    
    9 条回复    2019-03-04 09:52:16 +08:00
    napsterwu
        1
    napsterwu  
       2019-03-03 00:35:32 +08:00 via iPhone
    你自己看看一个页面有多少报文头,爬虫是这么好做的?
    bakabie
        2
    bakabie  
       2019-03-03 00:45:20 +08:00
    get 函数中设置一下 headers 报头吧。你好歹也装一下意思意思自己是个用户而不是爬虫呀
    lithiumii
        3
    lithiumii  
       2019-03-03 00:55:04 +08:00   ❤️ 1
    不会编 headers 可以先 f12,找到第一个请求右键复制成 cURL,然后去 curl.trillworks.com 转换成 python 或者别的语言。
    京东搜索页我记得挺松的,只需要 headers 就可以了,cookie 可以不用,下面的 params 只保留关键词就行。

    以下是搜 "1000x" 复制来的例子,cookie 我已经删了
    import requests

    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.5,zh;q=0.3',
    'Referer': 'https://www.jd.com/',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'TE': 'Trailers',
    }

    params = (
    ('keyword', '1000x'),
    ('enc', 'utf-8'),
    ('wq', '1000x'),
    ('pvid', '70b2126fcf3246ce9f32710d41799ede'),
    )

    response = requests.get('https://search.jd.com/Search', headers=headers, params=params)
    andylsr
        4
    andylsr  
       2019-03-03 01:06:54 +08:00 via Android
    😂😂你好歹加个 headers 啊~不然京东的兄弟多没面子
    Tink
        5
    Tink  
       2019-03-03 01:15:55 +08:00 via iPhone
    joke
    Oane
        6
    Oane  
       2019-03-03 10:24:45 +08:00
    加 header 最近刚写完京东爬虫,搜索请求似乎是不会封你的
    joyc
        7
    joyc  
    OP
       2019-03-03 11:06:50 +08:00
    谢谢楼上几位兄弟,爬虫新手,请见谅,正确设置 header 后 get 到了信息。
    昨天自己设置了 header 了也没有爬出来以为是别的限制问题呢,看来是 header 没设置对,
    特别感谢 @lithiumii 分享的这个转换 tool,收藏了,很好用。
    tigerstudent
        8
    tigerstudent  
       2019-03-03 15:00:28 +08:00
    @Oane 如果要模拟自动下单的请求,好做吗?
    Oane
        9
    Oane  
       2019-03-04 09:52:16 +08:00
    @tigerstudent 模拟下单没做过只爬数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2728 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:25 · PVG 20:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.