-1

フォームログインを行ってから、scrapy を使用してそのセッションで作業する方法は?

たとえば、ログイン認証があり、ログイン セッションにリンクされた 3 つの異なるページがある Web サイトを考えてみましょう。したがって、scrapy を使用して、最初にログインしてから、ホームページでいくつかをスクレイピングしてから、ホームページで利用可能な特定のリンクをたどり、リンクをクリックしてそのページからスクレイピングします。その後、再びホームページに戻り、別のリンクをたどります。ファイルccbank_spider.pyがあります。以下はコンテンツです

class LoginSpider(BaseSpider):

 #some code

 #for hitting and parsing of the Account URL
 for accountURL in (strip(s) for itemArr in items for s in itemArr['accountURL']):
    print accountURL
    yield request(accountURL, callback=self.account_transactions)

 def account_transactions(self, response):
  print 'print text'
  return None

以下のエラーが表示されます

          File "D:\NextGen\workspace\tutorial\tutorial\spiders\ccbank_spider.py", line       45, in after_login
       yield request(accountURL, callback=self.account_transactions)
   exceptions.TypeError: 'module' object is not callable
4

1 に答える 1

0

これは、最初の質問 (ログイン) に関するドキュメントからのものです。

class LoginSpider(BaseSpider):
    name = 'example.com'
    start_urls = ['http://www.example.com/users/login.php']

    def parse(self, response):
        return [FormRequest.from_response(response,
                    formdata={'username': 'john', 'password': 'secret'},
                    callback=self.after_login)]

    def after_login(self, response):
        # check login succeed before going on
        if "authentication failed" in response.body:
            self.log("Login failed", level=log.ERROR)
            return

        # continue scraping with authenticated session...

質問の他の部分については、ホームページからスクレイピングしたいすべてのリンクをスクレイピングして、新しいリクエストごとに行うことができます。

request = Request(url_to_scrape, callback=self.parse_item)
    request.meta['language'] = "eng"
    yield request

そして、この例の parse_item でそのページを解析し、ご覧のようにメタ情報を送信することもできます。

于 2012-07-17T11:46:17.950 に答える