В моем предыдущем вопросе я не очень разбирался в своей проблеме (соскабливание с проверенной сессией с помощью 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
, которую я пытался переопределить для входа в систему, теперь больше не делает необходимые вызовы для очистки любых последующих страниц (я предполагаю). И я не уверен, как сэкономить Предметы, которые я создаю.
Кто-нибудь сделал что-то подобное раньше? (Аутентификация, а затем обход, с помощью CrawlSpider
). Любая помощь будет оценена.