25

次のリンクに進むページが次のようになっているページをScrapyでクロールしたい:

<a href="#" onclick="return gotoPage('2');"> Next </a>

Scrapyはそのjavascriptコードを解釈できますか?

livehttpheaders拡張機能を使用すると、[次へ]をクリックすると、次のように始まる非常に巨大な「ガベージ」を含むPOSTが生成されることがわかりました。

encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n

クラスでスパイダーを構築しようとしてCrawlSpiderいますが、コーディング方法がわかりません。このメソッドBaseSpiderを使用してparse()、ログインフォームである最初のURLを処理し、POSTを実行しました。

def logon(self, response):
    login_form_data={ 'email': 'user@example.com', 'password': 'mypass22', 'action': 'sign-in' }
    return [FormRequest.from_response(response, formnumber=0, formdata=login_form_data, callback=self.submit_next)]

次に、submit_next()を定義して、次に何をするかを指示しました。最初のURLでどのメソッドを使用するかをCrawlSpiderに伝える方法がわかりません。

最初のリクエストを除いて、クロール中のすべてのリクエストはPOSTリクエストです。データの貼り付けと、[次へ]をクリックして次のページに移動するという2種類のリクエストが交互に行われます。

4

2 に答える 2

3

実際の方法論は次のようになります。

  1. ページにアクセスするためのリクエストを投稿します(あなたがやっているように)
  2. その特定の応答から次のページへのリンクを抽出します
  3. 可能であれば次のページを単純にリクエストするか、該当する場合は FormRequest を再度使用します

これはすべて、サーバー応答メカニズムで合理化する必要があります。たとえば、次のようになります。

  • dont_click = trueで使用してみることができますFormRequest.from_response
  • または、サーバーからのリダイレクト (302) を処理したい場合があります (この場合、リダイレクト要求の処理をコールバックにも送信する必要があることをメタで言及する必要があります)。

すべてを理解する方法: fiddler などの Web デバッガーを使用するか、Firefox プラグイン FireBug を使用するか、IE 9 で F12 を押すだけです。ユーザーが Web サイトで実際に行った要求が、Web ページをクロールしている方法と一致することを確認します。

于 2011-06-21T10:04:37.757 に答える
-1

セレン経由で JS を実行するクイック クローラーを作成しました。https://github.com/rickysahu/seleniumjscrawlを自由にコピー/変更してください

于 2014-07-27T13:01:34.843 に答える