我在使用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继续使用该页面?
答案 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)