2016-12-15 106 views
1

BackgroundInfo:使用requests.get()缺少Cookie的某些部分?

我刮亚马逊。在使用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中的亚马逊首页,饼干应该是这样的:

Amazon HomePage

正如你可以在cookies部分找到的那样,我用红色标出,响应我们对主页的请求所设置的cookies的一部分是“ubid-acbcn”,它也是请求标题的一部分,可能是最后一个访问。

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

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

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

什么我得到,而不是: 的 '会话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. 我用Google搜索某些关键词,但似乎没有人会面临这个问题 。
  2. 我想这可能与亚马逊 防刮措施有关。但除了改变我的标题来伪装我自己作为一个人之外,我知道我应该做的并不多。
  3. 我也接受过tt可能不是缺少cookie的情况的可能性。但是,我没有正确设置我的requests.get(homepage,headers = headers),因此response.cookie并不如预期。鉴于此,我试图在浏览器中复制请求标头,只留下cookie部分,但响应cookie仍缺少'ubid-acbcn'部分。也许还有其他一些参数需要设置?

回答

0

您正试图从简单的“无名”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' ...} 
+0

很奇怪。我今天尝试过,但没有奏效。既然你明明知道我在做什么。我的尝试肯定是错的。我在后台有一个VPN,但试图禁用它,仍然不会得到期望的结果。后来我注意到这可能是我浏览过网站,所以我去Chrome设置专门删除amazon.cn的cookies,它仍然不起作用。 –