私は最近 Python を勉強していて、Web スクレイパーの構築に取り組んでいます。これはまったく特別なものではありません。目的は、賭けの Web サイトからデータを取得し、そのデータを Excel に取り込むことだけです。
ほとんどの問題は解決可能で、私はかなり苦労しています。しかし、1 つの問題で大きな障害にぶつかっています。サイトが馬の表を読み込み、現在の賭け金を一覧表示する場合、この情報はどのソース ファイルにも存在しません。手がかりは、このデータが時々ライブであり、数字が明らかにリモート サーバーから更新されていることです。私の PC の HTML には、必要なすべての興味深いデータをサーバーがプッシュする穴があるだけです。
今のところ、動的 Web コンテンツに関する経験は浅いので、この点については理解するのに苦労しています。
Java または Javascript がキーになると思います。これは頻繁に発生します。
スクレイパーは、オッズ比較エンジンです。一部のサイトには API がありますが、そうでないサイトにはこれが必要です。私は Python 2.7 で scrapy ライブラリを使用しています。
この質問があまりにも曖昧な場合はお詫びします。簡単に言うと、私の質問は、この動的なデータをスクレイピングして使用できるようにするために、どのようにスクレイピングを使用すればよいかということです。この賭けのオッズ データをリアルタイムでスクレイピングできるようにするにはどうすればよいでしょうか。
参照:Python で動的コンテンツ (JavaScript で作成) を含むページをスクレイピングするにはどうすればよいですか?一般的なケースの場合。
ベストアンサー1
scrapy
これはAJAXリクエストの簡単な例です。サイトを見てみましょうrubin-kazan.ru。
すべてのメッセージは AJAX リクエストで読み込まれます。私の目標は、これらのメッセージをすべての属性 (作成者、日付など) とともに取得することです。
ページのソース コードを分析しても、Web ページが AJAX テクノロジを使用しているため、これらのメッセージをすべて確認することはできません。ただし、Mozilla Firefox の Firebug (または他のブラウザーの同等のツール) を使用すると、Web ページでメッセージを生成する HTTP 要求を分析できます。
ページ全体をリロードするのではなく、メッセージを含むページ部分のみをリロードします。このために、下部にある任意の数のページをクリックします。
そして、メッセージ本文を担当する HTTP リクエストを観察します。
終了後、リクエストのヘッダーを分析します (ソース ページの var セクションから抽出したこの URL を引用する必要があります。以下のコードを参照してください)。
リクエストのフォーム データの内容 (HTTP メソッドは「Post」) は次のとおりです。
応答の内容は JSON ファイルです。
私が探している情報がすべて表示されます。
これからは、この知識をすべて scrapy に実装する必要があります。この目的のためにスパイダーを定義しましょう。
class spider(BaseSpider):
name = 'RubiGuesst'
start_urls = ['http://www.rubin-kazan.ru/guestbook.html']
def parse(self, response):
url_list_gb_messages = re.search(r'url_list_gb_messages="(.*)"', response.body).group(1)
yield FormRequest('http://www.rubin-kazan.ru' + url_list_gb_messages, callback=self.RubiGuessItem,
formdata={'page': str(page + 1), 'uid': ''})
def RubiGuessItem(self, response):
json_file = response.body
関数にはparse
、最初のリクエストに対する応答があります。 には、RubiGuessItem
すべての情報を含む JSON ファイルがあります。