我想使用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不会提供。谷歌搜索它也没有给我答案。
因此,了解如何有效地实现它是很有趣的!有什么想法吗?!
答案 0 :(得分:2)
你需要提出获取cookie的请求,所以不,你不能获得cookie并重复使用它而不需要两个单独的请求。如果“启用cookie”是指将脚本识别为具有cookie的版本,那么这一切都取决于服务器,您可以尝试:
答案 1 :(得分:2)
我认为这里的获胜者可能是使用requests
的{{1}}框架,该框架会为您处理Cookie。
这看起来像这样:
session
尝试一下,看看是否有效?