以前の質問では、より一般的な回答から解決策を導き出せることを期待して、自分の問題 (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
)助けていただければ幸いです。