Scrapy在HTTP 401上中止

时间:2014-02-23 12:17:19

标签: python scrapy

我在使用Python Scrapy时遇到了麻烦。

我有一只蜘蛛试图在抓取之前登录网站,但该网站配置为在登录页面上返回响应代码HTTP 401,这会阻止蜘蛛继续(即使在该响应的正文中,登录表格可以提交)。

这是我的抓取工具的相关部分:

class LoginSpider(Spider):
name = "login"
start_urls = ["https://example.com/login"]

def parse(self, response):
    # Initial user/pass submit
    self.log("Logging in...", level=log.INFO)

以上产量:

2014-02-23 11:52:09+0000 [login] DEBUG: Crawled (401) <GET https://example.com/login> (referer: None)
2014-02-23 11:52:09+0000 [login] INFO: Closing spider (finished)

但是如果我给它另一个URL来启动(而不是登录页面)返回200:

2014-02-23 11:50:19+0000 [login] DEBUG: Crawled (200) <GET https://example.com/other-page> (referer: None)
2014-02-23 11:50:19+0000 [login] INFO: Logging in...

您会看到它继续执行我的parse()方法并生成日志条目。

尽管有401响应代码,我如何让Scrapy继续使用该页面?

1 个答案:

答案 0 :(得分:1)

在可能的情况下,此问题未作为重复方式关闭,明确将{401}添加到handle_httpstatus_list修复了问题

class LoginSpider(Spider):
    handle_httpstatus_list = [401]
    name = "login"
    start_urls = ["https://example.com/login"]

    def parse(self, response):
        # Initial user/pass submit
        self.log("Logging in...", level=log.INFO)