2017-05-20 12 views
1

の場合、複数のページからのデータのスクレイピング初心者はこちら。私は複数のページからデータを削り取ろうとしています。各ページには20個のエントリがあり、次のボタンをクリックして次のページに移動します。Scrapy - href =#

<a href="#" onClick="nextPage(2);"> Click me! </a> 

それは私が発見した他の多くの例のようXHRリクエストを使用していないので、このページではユニークです:タグがあるので、しかし、URLは変更されません。いくつかの答えは、Chrome/Firefox開発ツールを使ってGETリクエストを監視し、それらを複製することを提案しています。このサイトはXHRリクエストを生成するのではなく、一連のjavascriptリクエスト(1つのAJAX)を生成します。

私は、表示されたデータにスクレープを続けることができるように、次のページ(可能であれば、好ましくはセレンなしで)に転送するためにスクラピーを使いたいと思います。

これは参照用のWebページである:http://www.australianschoolsdirectory.com.au/search-result.php

初めてアスカー。前もって感謝します!

+1

に6を変更する必要がある場合は、[POSTリクエスト](HTTPにする必要があります:// stackoverflowのを.com/questions/17625053/how-to-send-post-data-in-start-the-scrapy-spider)を追加し、 'pageNum:'のような 'form-data'を追加してください。 – vold

答えて

1

次のページを取得するには、form-datapageNumとし、値としてページ番号を渡す必要があります。このコードは、最初の5ページを取得し、ブラウザでの応答を示しています

>>> from scrapy.http import FormRequest 
>>> url = 'http://www.australianschoolsdirectory.com.au/search-result.php' 
>>> for i in range(1, 6): 
...  payload={'pageNum': str(i)} 
...  r = FormRequest(url, formdata=payload) 
...  fetch(r) 
...  view(response) 
... 
2017-05-20 21:52:22 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.australianschoolsdirectory.com.au/search-result.php> (r 
eferer: None) 
True 
2017-05-20 21:52:25 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.australianschoolsdirectory.com.au/search-result.php> (r 
eferer: None) 
True 
2017-05-20 21:52:28 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.australianschoolsdirectory.com.au/search-result.php> (r 
eferer: None) 

あなたはすべてのページは、単に488

+0

これはありがとう、ありがとう! (私はまだupvoteできません、申し訳ありません!) –

+0

フィールド名が 'pageNum'だったのはどうでしたか? –

+0

'ネットワーク'タブで 'Doc'フィルタを選択し、ページ上の次をクリックします。あなたは投稿要求を見ることができます。そのリクエストをクリックしてスクロールダウンすると、 'pageNum'キーで' Form Data'を見ることができます。実際の治療コードを書き込む前に、ソフトを使用してリクエストの再生とテストを行うことができます。デバッグやテストのリクエストに[Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop)を使用します。 – vold