1

で認証されたscrapyログインを実行しようとしていますInitSpider。何らかの理由で、InitSpiderそれでは常にログインに失敗します。私のコードは、以下の投稿の回答に似ています。

Scrapyで認証されている間LinkedInをクロール

ログに表示される応答は次のとおりです。

2012-12-20 22:56:53-0500 [linked] DEBUG: Redirecting (302) to <GET https://example.com/> from <POST https://example.com/>

上記の投稿のコードを使用すると、同じ、、、init_requestおよびlogin関数がありcheck_login_responseます。loginログステートメントで関数に到達していることがわかりますが、関数に到達していないようcheck_login_responseです。

を使用してコードを再実装し、関数でを実行すると、問題なくログインできますBaseSpider。これには理由がありますか?他にやるべきことはありますか?でログインするためのリダイレクトを取得するのはなぜですか?FormRequestparseInitSpider

[編集]

class DemoSpider(InitSpider):
    name = 'linked'
    login_page = # Login URL
    start_urls = # All other urls

    def init_request(self):
        #"""This function is called before crawling starts."""
        return Request(url=self.login_page, callback=self.login)

    def login(self, response):
        #"""Generate a login request."""
        return FormRequest.from_response(response, 
            formdata={'username': 'username', 'password': 'password'},
            callback=self.check_login_response)

    def check_login_response(self, response):
        #"""Check the response returned by a login request to see if we are successfully logged in."""
        if "Sign Out" in response.body:
            self.log("\n\n\nSuccessfully logged in. Let's start crawling!\n\n\n")
            # Now the crawling can begin..
            return self.initialized()
        else:
            self.log("\n\n\nFailed, Bad times :(\n\n\n")
            # Something went wrong, we couldn't log in, so nothing happens.

    def parse(self, response):
        self.log('got to the parse function')

上記は私のスパイダーコードです。

4

1 に答える 1

2

これに少し苦労した後、私はそれを理解し、ブログに解決策を投稿しました:

http://tmblr.co/ZjkSZteCOTyH

基本的に私はログインを処理するためにメソッドを使用BaseSpiderし、オーバーライドします。start_requests

于 2012-12-21T20:20:25.073 に答える