次の問題があります。
私のスクレーパーは「ベース」URL から始まります。このページには、ajax 呼び出しを介して別のドロップダウンを作成するドロップダウンが含まれており、スクレイピングしたい実際のコンテンツがある「最終」ページに到達するために必要なすべての情報が得られるまで、これが 2 ~ 3 回カスケードされます。
何かをクリックする (そして Selenium などを使用する必要がある) のではなく、JSON API を公開しているページを使用してこの動作を模倣します。ドロップダウンをクリックする代わりに、単純にリクエストを送信し、次の生成に使用される情報の配列を含む JSON レスポンスを読み取ります。ドロップダウンのコンテンツを検索し、1 つのアイテムの最終的な URL が得られるまでこれを行います。この URL から、実際に解析する最終的なアイテム ページに移動します。
Scrapy を使用して、ドロップダウン ボックスのすべての組み合わせの「最終」URL を取得する方法について混乱しています。私は urllib を使用して、大量のループを使用して URL のすべての組み合わせを反復処理するクローラーを作成しましたが、Scrapy は少し異なるようです。Scrapy は、Django プロジェクトとの統合が容易な、より保守しやすいソリューションのように思えたので、urllib と lxml から離れました。
基本的に、私はScrapyに、json応答のコンテンツを読み取るときに途中で生成した特定のパスを取得させ、チェーンの最後のページのみを実際に解析して実際のコンテンツを取得しようとしています. 可能なすべてのページに対してこれを行う必要があり、効率的になるように並列化したいと思います(Torを使用しますが、これらは後で問題になります)。
よく説明できたと思いますが、ご不明な点がございましたら、お気軽にお問い合わせください。手伝ってくれてどうもありがとう!
編集:例を追加
[base url]/?location=120§ion=240
戻り値:
<departments>
<department id="62" abrev="SIG" name="name 1"/>
<department id="63" abrev="ENH" name="name 2"/>
<department id="64" abrev="GGTH" name="name 3"/>
...[more]
</departments>
次に、部門 ID を取得し、次のように URL に追加します。
[base url]/?location=120§ion=240&department_id=62
戻り値:
<courses>
<course id="1" name="name 1"/>
<course id="2" name="name 2"/>
</courses>
これは、リストへの実際のリンクにたどり着くまで続きます。
これは基本的にページ上でどのように見えるかです (ただし、私の場合、フォームに最後の「送信」ボタンがあり、解析したい実際のリストに移動します): http://roshanbh.com.np /落ちる/
そのため、ドロップダウンのすべての組み合わせをスクレイピングして、考えられるすべてのリスト ページを取得する方法が必要です。最終的なリスト URL を生成するために ajax xml 応答をたどる中間ステップは、私を台無しにしています。