【发布时间】:2017-04-12 13:39:05
【问题描述】:
我正在使用 scrapy 抓取具有身份验证的网站。
我希望能够保存爬虫的状态并使用
scrapy crawl myspider -s JOBDIR=mydir
在我使用相同的命令恢复之后,我希望能够在它重新安排所有已保存的请求之前登录网站。
基本上,我想确保我的函数 login() 和 after_login() 将在任何其他请求被安排和执行之前被调用。而且我不想使用 cookie,因为它们不允许我长时间暂停抓取。
我可以在start_requests() 中调用login(),但这仅在我第一次运行爬虫时有效。
class MyCrawlSpider(CrawlSpider):
# ...
START_URLS = ['someurl.com', 'someurl2.com']
LOGIN_PAGE = u'https://login_page.php'
def login(self):
return Request(url=self.LOGIN_PAGE, callback=self.login_email,
dont_filter=True, priority=9999)
def login_form(self, response):
return FormRequest.from_response(response,
formdata={'Email': 'myemail',
'Passwd': 'mypasswd'},
callback=self.after_login,
dont_filter=True,
priority=9999)
def after_login(self, response):
if "authentication failed" in response.body:
self.logger.error("Login failed")
return
else:
print("Login Successful!!")
self.is_logged_in = True
for url in self.START_URLS:
yield Request(url, callback=self.parse_artists_json, dont_filter=True)
底线:在重新安排以前的请求之前,当我使用-s JOBDIR=... 选项恢复抓取时,是否会始终调用任何回调?我会用它来调用login()方法。
【问题讨论】:
标签: python web-scraping scrapy web-crawler