为了账号安全,请及时绑定邮箱和手机立即绑定

在请求中发现 Scrapy 和无效的 cookie

在请求中发现 Scrapy 和无效的 cookie

莫回无 2023-04-18 14:41:23
网页抓取需求要从此处的eventbrite 链接的第一页抓取事件的标题。方法虽然该页面没有太多的 javascript,而且页面分页也很简单,但抓取页面上每个事件的标题非常容易,并且没有问题。但是我看到有一个 API,我想重新设计 HTTP 请求,以提高效率和结构化数据。问题我能够使用 requests python 包模拟 HTTP 请求,使用正确的标头、cookie 和参数。不幸的是,当我将相同的 cookie 与 scrapy 一起使用时,它似乎在抱怨 cookie 字典中的三个键是空白的'mgrefby': '', 'ebEventToTrack': '', 'AN': '', 。尽管它们在与请求包一起使用的 HTTP 请求中是空白的。请求包代码示例import requestscookies = {    'mgrefby': '',    'G': 'v%3D2%26i%3Dbff2ee97-9901-4a2c-b5b4-5189c912e418%26a%3Dd24%26s%3D7a302cadca91b63816f5fd4a0a3939f9c9f02a09',    'ebEventToTrack': '',    'eblang': 'lo%3Den_US%26la%3Den-us',    'AN': '',    'AS': '50c57c08-1f5b-4e62-8626-ea32b680fe5b',    'mgref': 'typeins',    'client_timezone': '%22Europe/London%22',    'csrftoken': '85d167cac78111ea983bcbb527f01d2f',    'SERVERID': 'djc9',    'SS': 'AE3DLHRwcfsggc-Hgm7ssn3PGaQQPuCJ_g',    'SP': 'AGQgbbkgEVyrPOfb8QOLk2Q893Bkx6aqepKtFsfXUC9SW6rLrY3HzVmFa6m91qZ6rtJdG0PEVaIXdCuyQOL27zgxTHS-Pn0nHcYFr9nb_gcU1ayxSx4Y0QXLDvhxGB9EMsou1MZmIfEBN7PKFp_enhYD6HUP80-pNUGLI9R9_CrpFzXc48lp8jXiHog_rTjy_CHSluFrXr2blZAJfdC8g2lFpc4KN8wtSyOwn8qTs7di3FUZAJ9BfoA',}headers = {    'Connection': 'keep-alive',    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36',    'X-Requested-With': 'XMLHttpRequest',    'X-CSRFToken': '85d167cac78111ea983bcbb527f01d2f',    'Content-Type': 'application/json',    'Accept': '*/*',    'Origin': 'https://www.eventbrite.com',    'Sec-Fetch-Site': 'same-origin',    'Sec-Fetch-Mode': 'cors',    'Sec-Fetch-Dest': 'empty',    'Referer': 'https://www.eventbrite.com/d/ny--new-york/human-resources/?page=2',    'Accept-Language': 'en-US,en;q=0.9',}
查看完整描述

2 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

看起来他们正在使用not value而不是更准确的value is not None. 打开一个问题是你唯一的长期资源,但是子类化 cookie 中间件是短期的,非 hacky 修复。

一个 hacky 修复是利用这样一个事实,即他们在执行此操作时没有正确转义 cookie 值,'; '.join()因此您可以将 cookie 的值设置为合法的 cookie 指令(我选择是HttpOnly因为您不关心 JS),然后cookiejar出现丢弃它,产生你关心的实际价值

>>> from scrapy.downloadermiddlewares.cookies import CookiesMiddleware

>>> from scrapy.http import Request

>>> cm = CookiesMiddleware(debug=True)

>>> req = Request(url='https://www.example.com', cookies={'AN': '; HttpOnly', 'alpha': 'beta'})

>>> cm.process_request(req, spider=None)

2020-08-01 15:08:58 [scrapy.downloadermiddlewares.cookies] DEBUG: Sending cookies to: <GET https://www.example.com>

Cookie: AN=; alpha=beta

>>> req.headers

{b'Cookie': [b'AN=; alpha=beta']}


查看完整回答
反对 回复 2023-04-18
?
慕斯王

TA贡献1864条经验 获得超2个赞

目前的解决方案是使用旧版本的 scrapy(2.2.0 或更低版本),因为最新的 2.3.0 是添加此 cookie 检查的地方。


查看完整回答
反对 回复 2023-04-18
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信