在我之前的问题中,我对我的问题不是很具体(使用 Scrapy 的经过身份验证的会话进行抓取),希望能够从更一般的答案中推断出解决方案。我可能宁愿使用这个词crawling
。
所以,到目前为止,这是我的代码:
class MySpider(CrawlSpider):
name = 'myspider'
allowed_domains = ['domain.com']
start_urls = ['http://www.domain.com/login/']
rules = (
Rule(SgmlLinkExtractor(allow=r'-\w+.html$'), callback='parse_item', follow=True),
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
if not "Hi Herman" in response.body:
return self.login(response)
else:
return self.parse_item(response)
def login(self, response):
return [FormRequest.from_response(response,
formdata={'name': 'herman', 'password': 'password'},
callback=self.parse)]
def parse_item(self, response):
i['url'] = response.url
# ... do more things
return i
如您所见,我访问的第一个页面是登录页面。如果我还没有通过身份验证(在parse
函数中),我会调用我的自定义login
函数,该函数会发布到登录表单。然后,如果我通过了身份验证,我想继续爬取。
问题是parse
我试图覆盖以登录的功能,现在不再进行必要的调用来抓取任何其他页面(我假设)。而且我不确定如何保存我创建的项目。
以前有人做过这样的事情吗?(验证,然后爬行,使用 a CrawlSpider
)任何帮助将不胜感激。