首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在启用Zyte代理管理器(前Crawlera)的情况下使用刮伤蜘蛛进行身份验证?

如何在启用Zyte代理管理器(前Crawlera)的情况下使用刮伤蜘蛛进行身份验证?
EN

Stack Overflow用户
提问于 2021-08-18 18:57:47
回答 1查看 495关注 0票数 0

我按照scrapy zyte-智能代理文档将代理使用集成到我的蜘蛛中。现在我的蜘蛛不能登录了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-18 18:57:47

要做到这一点,我们必须使用爬虫会议,而且,我们需要禁用爬虫曲奇饼。有一个旧的按下,但它仍然没有合并,不能工作。您需要在自己的擦伤中间件文件中创建your_project/middleware.py文件,以便为每个蜘蛛请求添加爬虫头。

代码语言:javascript
复制
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文件中启用此中间件。

代码语言:javascript
复制
SPIDER_MIDDLEWARES = {
    'your_project.middlewares.ZyteSmartProxySessionMiddleware': True,
}

要启动会话,请将X-Crawlera-Session: create头附加到您的刮伤爬行器中的登录请求。

代码语言:javascript
复制
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秒。对于更受欢迎的域,这些延迟可能有所不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68837946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档