2016-08-05 4 views
0

私はこのページでscrapyシェルを使用していますPittsburgh Steelers at New England Patriots - September 10th, 2015個々のチームの統計情報を取得しています。例えば、私はアウェイチームの要素を検査し、コピーするときに、XPathはPro-Football-Referenceチームの統計情報XPath

//*[@id="team_stats"]/tbody/tr[5]/td[1] 

を生み出す(464)の合計ヤードを引くしたいが、私は

response.xpath('//*[@id="team_stats"]/tbody/tr[5]/td[1]') 

何も実行しない場合に返されます。私は、このテーブルが最初のデータとは別のdivにあることに気づいたので、私が上に上がる必要があるかどうかはわかりません。

//*[@id="team_stats"] 

xpathは何も返しません。どんな助けでも大歓迎です。

答えて

1

あなたが遭遇する問題は、(このような場合のように)ウェブサイトが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() 
+0

あなたはコメント区切り文字が削除された後に抽出されたコメントのテキストは、その後、別のセレクタへの入力として使用することができることを言及できました。 – Markus

+0

お二人に感謝します。 – Jeff

+0

GHajbaまたは@Markusのもう1つの質問ですが、コメントをHTMLに変換したり、これらの区切り記号を削除することについて学ぶことができるリファレンスを教えてください。 – Jeff

関連する問題