【问题标题】:Add cookies in request module python在请求模块python中添加cookie
【发布时间】:2016-01-10 20:40:35
【问题描述】:

我正在抓取 www.bing.com 搜索引擎,默认它提供 10 个结果,但如果我们想要更多结果,我们可以在浏览器中将其增加 setting。现在我想要在 python 中使用请求模块获得超过 10 个结果。要获得 30 结果,我们必须在 cookie 中设置 {NRSLT : 30}

我的代码

payload = {'q': "SACHIN", 'go' : 'Submit+Query', 'qs' : 'bs', 'form' : 'QBRE'}

headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0'}

req = requests.get("https://www.bing.com/search", headers=headers, params=payload, timeout=10, cookies={'NRSLT' :'30'})

print req.cookies

<<class 'requests.cookies.RequestsCookieJar'>[<Cookie MUID=0EC3618FCAF862C41C6369B0CB4563A5 for .bing.com/>, <Cookie SRCHD=AF=QBRE for .bing.com/>, <Cookie SRCHUSR=AUTOREDIR=0&GEOVAR=&DOB=20151013 for .bing.com/>, <Cookie _EDGE_S=F=1&SID=3A5F411A73356B471C16492572886A84 for .bing.com/>, <Cookie _EDGE_V=1 for .bing.com/>, <Cookie _FS=NU=1 for .bing.com/>, <Cookie _SS=SID=7DD3F0992D964941871C0C26DE81D3D2 for .bing.com/>, <Cookie MUIDB=0EC3618FCAF862C41C6369B0CB4563A5 for www.bing.com/>, <Cookie SRCHUID=V=2&GUID=00B888BB1B93486087FD9FE628581779 for www.bing.com/>]>

在此我没有在 cookie 中设置密钥“NRSLT”。我哪里出错了?

【问题讨论】:

  • 对于更专业的用法,您可以使用Bing Search API 和定义更好的界面。
  • 免费请求必应搜索api非常少
  • 为什么您使用 Bing 而不是 Google?
  • 我已经在使用 google 和 yahoo,现在想使用 bing

标签: python python-2.7 cookies module request


【解决方案1】:

我会使用现有的 cookie 来确保页面接受 cookie。对于此任务,您可以使用 Session instance,它已经为您隐式处理了 cookie。

# create a session object
s = requests.Session()
# retrieve a default cookie
s.get("https://bing.com")

# prepare the request parameters
payload = {'q': "SACHIN", 'go' : 'Submit+Query', 'qs' : 'bs', 'form' : 'QBRE'}
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0'}
# set the cookie variable NRSLT in the existing cookie
s.cookies.set("NRSLT", "50")
# sent prepared request to server
req = s.get("https://www.bing.com/search", headers=headers, params=payload, timeout=10)

【讨论】:

  • 当我“打印 req.cookies”时,我得到的输出为 []>
  • get [, , , ]>
  • 在我设置的代码中s.cookies.set("NRSLT", "50") 和你的输出中有&lt;Cookie NRSLT=50 for /&gt;。响应文本是否不包含 50 个结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 2014-07-17
  • 1970-01-01
  • 2012-06-07
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多