我按照scrapy zyte-智能代理文档将代理使用集成到我的蜘蛛中。现在我的蜘蛛不能登录了。
发布于 2021-08-18 18:57:47
要做到这一点,我们必须使用爬虫会议,而且,我们需要禁用爬虫曲奇饼。有一个旧的按下,但它仍然没有合并,不能工作。您需要在自己的擦伤中间件文件中创建your_project/middleware.py文件,以便为每个蜘蛛请求添加爬虫头。
from scrapy import Request
class ZyteSmartProxySessionMiddleware(object):
def process_spider_output(self, response, result, spider):
def _set_session(request_or_item):
if not isinstance(request_or_item, Request):
return request_or_item
request = request_or_item
header = b'X-Crawlera-Session'
session = response.headers.get(header)
error = response.headers.get(b'X-Crawlera-Error')
session_is_bad = error == b'bad_session_id'
if session is not None and not session_is_bad:
request.headers[header] = session
request.headers['X-Crawlera-Cookies'] = 'disable'
return request
return (_set_session(request_or_item)
for request_or_item in result or ())在settings.py文件中启用此中间件。
SPIDER_MIDDLEWARES = {
'your_project.middlewares.ZyteSmartProxySessionMiddleware': True,
}要启动会话,请将X-Crawlera-Session: create头附加到您的刮伤爬行器中的登录请求。
def parse(self, response):
auth_data = {'username': self.user, 'password': self.password}
request = FormRequest.from_response(response, formdata=auth_data,
callback=self.redirect_to_select)
request.headers.setdefault('X-Crawlera-Session', 'create')
return request请注意,根据文档,蜘蛛将在此之后被放慢速度。
在使用相同IP的每个请求之间,默认延迟为12秒。对于更受欢迎的域,这些延迟可能有所不同。
https://stackoverflow.com/questions/68837946
复制相似问题