認証済み(ログイン済み)ユーザーセッションでのScrapyの使用

ハーマン・シャーフ:

Scrapyドキュメント、Scrapyで認証されたセッションを使用する方法を説明するための次の例があります。

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...

私はそれでうまくいきました、そしてそれは大丈夫です。しかし、私の質問は次のとおりcontinue scraping with authenticated sessionです。最後の行のコメントで彼らが言うようにあなたは何をしなければなりませんか?

どんぐり:

上記のコードでFormRequestは、認証に使用されているのafter_login関数がコールバックとして設定されています。これは、after_login関数が呼び出され、ログイン試行が応答として取得したページを渡すことを意味します。

次に、特定の文字列(この場合)をページで検索して、正常にログインしていることを確認します"authentication failed"見つかった場合、クモは終了します。

これで、スパイダーがこれまでに到達すると、認証に成功したことがわかり、新しいリクエストの生成やデータのスクレイピングを開始できます。したがって、この場合:

from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request

# ...

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
    # We've successfully authenticated, let's have some fun!
    else:
        return Request(url="http://www.example.com/tastypage/",
               callback=self.parse_tastypage)

def parse_tastypage(self, response):
    hxs = HtmlXPathSelector(response)
    yum = hxs.select('//img')

    # etc.

ここを見る、削る前に認証を行うクモの例があります。

この場合、parse関数内の処理(リクエストのデフォルトのコールバック)を行います。

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    if hxs.select("//form[@id='UsernameLoginForm_LoginForm']"):
        return self.login(response)
    else:
        return self.get_section_links(response)

したがって、リクエストが行われるたびに、ログインフォームが存在するかどうかの応答がチェックされます。存在する場合はログインする必要があることがわかっているため、関連する関数を呼び出します。存在しない場合は、応答からデータをスクレイピングする関数を呼び出します。

これが明確であることを願っています。他にご不明な点がございましたら、お気軽にお問い合わせください。


編集:

さて、あなたはただ一つのリクエストをスポーンしてそれをこするだけではありません。リンクをたどりたい。

そのためには、ページから関連リンクをスクレイピングし、それらのURLを使用してリクエストを生成するだけです。例えば:

def parse_page(self, response):
    """ Scrape useful stuff from page, and spawn new requests

    """
    hxs = HtmlXPathSelector(response)
    images = hxs.select('//img')
    # .. do something with them
    links = hxs.select('//a/@href')

    # Yield a new request for each link we found
    for link in links:
        yield Request(url=link, callback=self.parse_page)

ご覧のとおり、ページ上のすべてのURLに対して新しいリクエストが生成され、それらのリクエストのそれぞれが応答を使用して同じ関数を呼び出すため、再帰的なスクレイピングが行われています。

上で書いたものはほんの一例です。ページを「クロール」する場合は、CrawlSpider手動で行うのではなく、調べる必要があります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ログアウト後にセッションが認証済みユーザーのデータをキャッシュしないようにする方法

分類Dev

現在のセッションの認証済みユーザーのプロファイルデータを更新する最も簡単な方法

分類Dev

Scrapyで認証済みセッションを使用してクロールする

分類Dev

Laravelがユーザーの認証済みセッションを作成しない

分類Dev

署名済みのインストール済み認証済みアクセス

分類Dev

Laravel5.2で確認済みのユーザーのみにログインする方法

分類Dev

haproxy認証済みのユーザーベースのバックエンドルーティング

分類Dev

Windows の一部のハード ドライブ パーティションで削除された認証済みユーザーを元に戻したい

分類Dev

many = Trueシリアライザービューセットで認証済みユーザーを取得

分類Dev

CouchDB の「認証済みユーザー」ロール

分類Dev

匿名ユーザーと認証済みユーザーの同じエンドポイント

分類Dev

.Net core:ユーザーをログインおよび認証済みとして設定します

分類Dev

Mixpanelを使用してさまざまな認証済みユーザーのアクションを追跡する方法

分類Dev

AngularJSを使用した認証メカニズム(ユーザーセッションの読み込み)

分類Dev

ASP.NET MVCのロール(データベース外)をハードコーディングし、Windows認証済みユーザーを追加する

分類Dev

ロールを持つ認証済みユーザーのSpringSecurityJava構成

分類Dev

Web アプリケーションから Firebase 認証済みユーザーを削除する

分類Dev

RabbitMQ でのプライベート メッセージング。何を選択するか: 検証済みのユーザー ID、クライアントごとのキュー、クライアントごとの vhost?

分類Dev

ユーザー認証済みのFirebaseAngular5を削除する

分類Dev

認証済みユーザーの/ loginから/へのリダイレクト

分類Dev

Laravel認証済みの動的サブドメインルーティング

分類Dev

laravel マイグレーションを使用して、作成済みのテーブルにアクセスする

分類Dev

Sentry2を使用して認証済みユーザーにLaravel4の他のユーザーのプロファイルを表示させます

分類Dev

DocuSign:REST APIを介して、現在の認証済みユーザーがエンベロープを表示できないことを検出できます

分類Dev

C ++コンパイル済みプログラムでセグメンテーション違反の原因となった行を見つける方法

分類Dev

ユーザーとして、GitHub Enterpriseのインストール済みバージョンを確認するにはどうすればよいですか?

分類Dev

現在の認証済みユーザーをエンティティの参照として設定する方法

分類Dev

Firebaseトランザクションを使用してユーザーコレクションと認証済みユーザーを作成するにはどうすればよいですか?

分類Dev

Django Rest Frameworkのトークンから認証済みユーザーを取得する

Related 関連記事

  1. 1

    ログアウト後にセッションが認証済みユーザーのデータをキャッシュしないようにする方法

  2. 2

    現在のセッションの認証済みユーザーのプロファイルデータを更新する最も簡単な方法

  3. 3

    Scrapyで認証済みセッションを使用してクロールする

  4. 4

    Laravelがユーザーの認証済みセッションを作成しない

  5. 5

    署名済みのインストール済み認証済みアクセス

  6. 6

    Laravel5.2で確認済みのユーザーのみにログインする方法

  7. 7

    haproxy認証済みのユーザーベースのバックエンドルーティング

  8. 8

    Windows の一部のハード ドライブ パーティションで削除された認証済みユーザーを元に戻したい

  9. 9

    many = Trueシリアライザービューセットで認証済みユーザーを取得

  10. 10

    CouchDB の「認証済みユーザー」ロール

  11. 11

    匿名ユーザーと認証済みユーザーの同じエンドポイント

  12. 12

    .Net core:ユーザーをログインおよび認証済みとして設定します

  13. 13

    Mixpanelを使用してさまざまな認証済みユーザーのアクションを追跡する方法

  14. 14

    AngularJSを使用した認証メカニズム(ユーザーセッションの読み込み)

  15. 15

    ASP.NET MVCのロール(データベース外)をハードコーディングし、Windows認証済みユーザーを追加する

  16. 16

    ロールを持つ認証済みユーザーのSpringSecurityJava構成

  17. 17

    Web アプリケーションから Firebase 認証済みユーザーを削除する

  18. 18

    RabbitMQ でのプライベート メッセージング。何を選択するか: 検証済みのユーザー ID、クライアントごとのキュー、クライアントごとの vhost?

  19. 19

    ユーザー認証済みのFirebaseAngular5を削除する

  20. 20

    認証済みユーザーの/ loginから/へのリダイレクト

  21. 21

    Laravel認証済みの動的サブドメインルーティング

  22. 22

    laravel マイグレーションを使用して、作成済みのテーブルにアクセスする

  23. 23

    Sentry2を使用して認証済みユーザーにLaravel4の他のユーザーのプロファイルを表示させます

  24. 24

    DocuSign:REST APIを介して、現在の認証済みユーザーがエンベロープを表示できないことを検出できます

  25. 25

    C ++コンパイル済みプログラムでセグメンテーション違反の原因となった行を見つける方法

  26. 26

    ユーザーとして、GitHub Enterpriseのインストール済みバージョンを確認するにはどうすればよいですか?

  27. 27

    現在の認証済みユーザーをエンティティの参照として設定する方法

  28. 28

    Firebaseトランザクションを使用してユーザーコレクションと認証済みユーザーを作成するにはどうすればよいですか?

  29. 29

    Django Rest Frameworkのトークンから認証済みユーザーを取得する

ホットタグ

アーカイブ