在python中获取启用cookie的页面

时间:2012-11-19 01:52:20

标签: python cookies web-scraping python-requests

我想使用python下载一个网页来进行一些网页抓取任务。问题是网站要求启用cookie,否则它会提供不同版本的页面。 我确实实施了解决问题的解决方案,但在我看来效率低下。需要你的帮助才能改进它!

这就是我现在的看法:

import requests
import cookielib

cj = cookielib.CookieJar()
user_agent = {'User-agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}
#first request to get the cookies
requests.get('https://ccirecruit.cox.com/psc/RECRUIT/EMPLOYEE/HRMS/c/HRS_HRAM.HRS_CE.GBL?JobOpeningId=42845&SiteId=1&Page=HRS_CE_JOB_DTL&PostingSeq=1&',headers=user_agent, timeout=2, cookies = cj)
# second request reusing cookies served first time
r = requests.get('https://ccirecruit.cox.com/psc/RECRUIT/EMPLOYEE/HRMS/c/HRS_HRAM.HRS_CE.GBL?JobOpeningId=42845&SiteId=1&Page=HRS_CE_JOB_DTL&PostingSeq=1&',headers=user_agent, timeout=2, cookies = cj)
html_text = r.text

基本上,我创建了一个CookieJar对象,然后发送两个连续的同一URL请求。 第一次它为我提供了糟糕的页面但是补偿给了cookie。第二个请求重用了这个cookie,我得到了正确的页面。

问题是:是否可以只使用一个请求并仍然获得正确的Cookie启用版本的页面?

我尝试首次发送HEAD请求而非GET以最小化流量,在这种情况下,Cookie不会提供。谷歌搜索它也没有给我答案。 因此,了解如何有效地实现它是很有趣的!有什么想法吗?!

2 个答案:

答案 0 :(得分:2)

你需要提出获取cookie的请求,所以不,你不能获得cookie并重复使用它而不需要两个单独的请求。如果“启用cookie”是指将脚本识别为具有cookie的版本,那么这一切都取决于服务器,您可以尝试:

  • 在第一次请求之前对cookie进行硬编码,
  • 请求一些尽可能小的页面(包含cookie的可能响应最小)以获取第一个cookie,
  • 试图找到一些walkaroung(可能会添加一些GET参数会欺骗网站让你相信你有cookie - 但是你需要找到这个特定的网站),

答案 1 :(得分:2)

我认为这里的获胜者可能是使用requests的{​​{1}}框架,该框架会为您处理Cookie。

这看起来像这样:

session

尝试一下,看看是否有效?

相关问题