ホームページ  >  記事  >  バックエンド開発  >  Scrapy はクローリング プロセス中にどのように自動的にログインしますか?

Scrapy はクローリング プロセス中にどのように自動的にログインしますか?

王林
王林オリジナル
2023-06-23 09:20:451220ブラウズ

Scrapy はクローリング プロセス中にどのように自動的にログインしますか?

Web サイトのデータをクロールする場合、一部の Web サイトでは、特定のページを閲覧したり、追加のデータを取得したりするためにユーザーのログイン認証が必要になります。同時に、ログイン後にのみ取得できる一部のデータについては、クローラ エンジニアが自動操作を使用して Web サイトへのログインをシミュレートし、クローラ データを収集することがよくあります。この記事では、Scrapy に自動ログイン機能を実装する方法を詳しく説明します。

  1. ログイン スパイダーの作成

新しいスパイダーを作成し、「login_spider」という名前を付けます。このスパイダーの目的は、シミュレートされたログイン作業を完了すること、つまり、クローラーが開始する前にユーザーのログイン作業を完了することです。

  1. ログイン フォームの作成

ログイン ページでフォームを見つけて、フォームの HTML コードを表示します。
「ユーザー名」、「パスワード」など、入力する必要があるフィールド (name 属性) を見つけてコピーします。
Selector メソッドを使用してこれらのフィールドに対応する入力タグを検索し、extract() メソッドを使用して値を取得し、対応するキー値に割り当てます。

    def parse(self,response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'username': 'your_username', 'password': 'your_password'},
            callback=self.start_scraping
        )
  1. ログイン スパイダーの実行開始時にコールバック関数を作成します

ここでのログイン コールバック関数が行うことは、ログイン トークン値を含む応答を通じて Cookie を取得することです。新しい Request オブジェクトを構築し、後続のビジネス スパイダーで使用するために Cookie (ヘッダー) 値を渡します。

    def start_scraping(self, response):
        # Get CSRF token
        token = response.css('input[name="csrf_token"]::attr(value)').extract_first()
        logging.info('CSRF token obtained: ' + token)

        # Create cookie dict
        cookie = response.headers.getlist('Set-Cookie')
        cookie = [str(c, 'utf-8') for c in cookie]
        cookie_dict = {
            str(c.split('; ')[0].split('=')[0]): str(c.split('; ')[0].split('=')[1])
            for c in cookie
        }

        # Store cookie dict in spider settings
        self.settings.set('COOKIE_DICT', cookie_dict, priority='cmdline')

        # Start scraping main website
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie}
        )
  1. Cookie を使用してユーザー情報を含むリクエストを発行します

スパイダーにログインした後、start_requests メソッドを呼び出して最初のリクエストを送信します。前の手順で保存した cookie_dict の値を設定から取得し、headers パラメーターを使用してクローラーに渡します。

    def start_requests(self):
        cookie = self.settings.get('COOKIE_DICT')
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie},
            meta={'login': True}
        )
  1. ビジネス スパイダーの作成

ログイン後、Cookie 情報を使用して実際の目的のページにアクセスします。ビジネス スパイダーのカスタマイズでは、Cookie 情報を取得する必要があるすべての関連 URL に Cookie 情報を使用してアクセスします。以下は簡単なビジネス スパイダー コードです。

    class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        yield scrapy.Request('https://www.example.com/real-target-url/', callback=self.parse, headers={'Cookie': self.settings.get('COOKIE_DICT')})

    def parse(self, response):
        # Do whatever you want with the authenticated response

上記の手順により、Scrapy フレームワークを使用してシミュレートされたログイン機能を実装できます。 Cookie 値を保持することにより、Scrapy はログアウトせずにログイン検証が必要なデータをキャプチャし続けることができます。そうすることでセキュリティ上の問題が発生する可能性がありますが、この解決策は、クローラーを学習し、学術目的で研究を行う場合には実行可能です。

以上がScrapy はクローリング プロセス中にどのように自動的にログインしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。