【发布时间】:2012-11-06 22:54:36
【问题描述】:
我想使用 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。谷歌搜索也没有给我答案。
因此,了解如何有效地制作它很有趣!有什么想法吗?!
【问题讨论】:
-
从 requests 0.6.0 kennethreitz.com/requests-v060-released.html#dict-cookies开始,您不需要手动使用
CookieJar -
是的@yonilevy 不错!现在会这样使用它。
-
链接已损坏@yonilevy
-
@goldisfine 谢谢,这是另一个:stackoverflow.com/a/7164897/145823
标签: python cookies web-scraping python-requests