【问题标题】:Missing certain part of Cookies using requests.get()?使用 requests.get() 缺少 Cookie 的某些部分?
【发布时间】:2017-04-30 14:15:37
【问题描述】:

背景信息:

我正在刮亚马逊。在使用 requests.session.get() 获取最终版本的 url 页面源代码之前,我需要设置会话 cookie。

代码:

import requests

# I am currently working in China, so it's cn. 
# Use the homepage to get cookies. Then use it later to scrape data.
homepage = 'http://www.amazon.cn'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
response = requests.get(homepage,headers = headers)
cookies = response.cookies

#set up the Session object, so as to preserve the cookies between requests.
session = requests.Session()
session.headers = headers
session.cookies = cookies

#now begin download the source code
url = 'https://www.amazon.cn/TCL-%E7%8E%8B%E7%89%8C-L65C2-CUDG-65%E8%8B%B1%E5%AF%B8-%E6%96%B0%E7%9A%84HDR%E6%8A%80%E6%9C%AF-%E5%85%A8%E6%96%B0%E7%9A%84%E9%87%8F%E5%AD%90%E7%82%B9%E6%8A%80%E6%9C%AF-%E9%BB%91%E8%89%B2/dp/B01FXB0ZG4/ref=sr_1_2?ie=UTF8&qid=1476165637&sr=8-2&keywords=L65C2-CUDG'
response = session.get(url)

期望的结果:

在 Chrome 中导航到亚马逊主页时,cookie 应该是这样的:

在我用红色下划线的cookies部分可以看到,响应我们对首页的请求设置的cookies部分是“ubid-acbcn”,也是请求头的一部分,可能左边从上次访问开始。

这就是我想要的cookie,我试图通过上面的代码得到它。

在python代码中,它应该是一个cookieJar,或者一个字典。无论哪种方式,它的内容都应该包含 'ubid-acbcn' 和 'session-id'

{'ubid-acbcn':'453-7613662-1073007','session-id':'455-1363863-7141553','otherparts':'otherparts'}

我得到的是什么: 'session-id' 存在,但缺少 'ubid-acbcn'。

>>homepage = 'http://www.amazon.cn'
>>headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
>>response = requests.get(homepage,headers = headers)
>>cookies = response.cookies
>>print(cookies.get_dict()):
>>{'session-id': '456-2975694-3270026','otherparts':'otherparts'}

相关信息:

  • 操作系统:WINDOWS 10
  • Python:3.5
  • 请求:2.11.1

对不起,我有点冗长。

我尝试过并得出的结论:

  1. 我搜索了某些关键字,但似乎没有人遇到这个问题 问题。
  2. 我认为这可能与亚马逊有关 防刮措施。但除了改变我的标题来伪装 作为一个人类,我知道自己应该做的事情并不多。
  3. 我还考虑到 tt 可能不是缺少 cookie 的情况。而是我没有正确设置我的 requests.get(homepage,headers = headers),因此 response.cookie 不符合预期。鉴于此,我尝试在浏览器中复制请求标头,仅省略 cookie 部分,但响应 cookie 仍然缺少“ubid-acbcn”部分。也许必须设置其他一些参数?

【问题讨论】:

    标签: python session web-scraping python-requests


    【解决方案1】:

    您正试图从简单的“无名”GET 请求中获取 cookie。但是,如果“代表”Session 发送它,您可以获得所需的ubid-acbcn 值:

    session = requests.Session()
    homepage = 'http://www.amazon.cn'
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
    response = session.get(homepage,headers = headers)
    cookies = response.cookies
    print(cookies.get_dict())
    

    输出:

    {'ubid-acbcn': '456-2652288-5841140' ...}
    

    【讨论】:

    • 这很奇怪。我今天试过这个,但没有奏效。既然你清楚地得到我什么。我的尝试一定有问题。我在后台有一个 VPN,但尝试禁用它,仍然无法获得预期的结果。后来我发现可能是我浏览了网站,所以我去Chrome设置专门删除amazon.cn的cookie,还是不行。
    【解决方案2】:

    设置的 cookie 来自其他页面/资源,可能由 JavaScript 代码加载。因此,您可能需要为此使用 selenium Web 驱动程序。查看链接以获取详细讨论。

    not getting all cookie info using python requests module

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多