あなたが遭遇する問題は、(このような場合のように)ウェブサイトがJavaScriptを使用してゲームの完全な情報を表示することです。つまり、Scrapyでは、ブラウザでブラウザを開いたときに、Webサイトが表示されているのを見ることができません。
ページをロードした後でScrapyはJavaScriptを実行しないため、IDがteam_stats
の正しい表がレンダリングされません。 "Team Stats"テーブルの内容はロードされたWebサイトにありますが、コメントアウトされています。
解決策の1つは、チームの統計情報を含むコメントを抽出し、そのコメントテキストをHTMLに変換してそこにあるデータを抽出することです。
response.xpath('//div[@id="all_team_stats"]//comment()').extract()
上記のテキストは、必要な表を含むコメントを抽出します。
将来的には、Chromeの開発ツールを使用して、サイトを分析するJavaScriptを無効にして、そのオプションでサイトを読み込むことをおすすめします。これは、Scrapyが見るように、ページのコンテンツを返します。
EDIT
コメントを抽出した後、あなたはマルクスが彼のコメントで述べたと同じように新しいセレクタにそれを養うことができます。
new_selector = Selector(text=extracted_text)
そして、あなたのように再び.xpath()
を使用することができます。この新しいセレクタにresponse
オブジェクトで行います。
コメント区切り記号を削除することは簡単です。文字列である抽出されたテキストの最初と最後から削除する必要があります。 HTMLのコメントは、<!--
で始まり、-->
で終わります。これらの文字の間のテキストを新しいセレクタに供給する必要があります。上記からの例を拡張
:
extracted_text = response.xpath('//div[@id="all_team_stats"]//comment()').extract()[0]
new_selector = Selector(text=extracted_text[4:-3].strip())
new_selector.xpath('//*[@id="team_stats"]/tbody/tr[5]/td[1]').extract()
あなたはコメント区切り文字が削除された後に抽出されたコメントのテキストは、その後、別のセレクタへの入力として使用することができることを言及できました。 – Markus
お二人に感謝します。 – Jeff
GHajbaまたは@Markusのもう1つの質問ですが、コメントをHTMLに変換したり、これらの区切り記号を削除することについて学ぶことができるリファレンスを教えてください。 – Jeff