0

ScrapyにWebサイトにログインさせて、その特定のページに移動して情報を取得できるようにしようとしています。私は以下のコードを持っています:

class DemoSpider(InitSpider):
    name = "demo"
    allowed_domains = ['example.com']
    login_page = "https://www.example.com/"
    start_urls = ["https://www.example.com/secure/example"]

    rules = (Rule(SgmlLinkExtractor(allow=r'\w+'),callback='parse_item', follow=True),)

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

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

    # Check the response after logging in, make sure it went well
    def check_login_response(self, response):
        """Check the response returned by a login request to see if we are
        successfully logged in.
        """
        if "authentication failed" in response.body:
            self.log("Login failed", level=log.ERROR)
            return

        else:
            self.log('will initialize')
            self.initialized(response)

    def parse_item(self, response):
        self.log('got to the parse item page')

スパイダーを実行するたびに、ログインして初期化されます。ただし、ルールに一致することはありません。これには理由がありますか?私はこれに関して以下のサイトをチェックしました:

Scrapyで認証されたセッションでクロールする

ドキュメントを含む他の多くのサイトもあります。start_urls初期化した後、各ページを通過してからスクレイプすることがないのはなぜですか?

4

2 に答える 2

3

ではルールを使用できませんInitSpider。でのみ利用可能crawlspider

于 2012-12-21T06:22:52.603 に答える
1

他の質問を見ると、パラメーターなしで self.initialized を返す必要があるように見えます。return self.initialized()

于 2012-12-21T10:07:25.073 に答える