2012-02-14 20 views
0

でXPathエントリからテキストを取得し、私はウェブサイトトラブルのpython

http://www.baseball-reference.com/players/event_hr.cgi?id=bondsba01&t=b

とテーブルからデータをこすりしようとしているにしています。私は1つのエントリからXPathを引くと、投手 が言う「テリーマルホランドを、」私はこれを取得:

pitchers = site.xpath("/html/body/div[2]/div[2]/div[6]/table/tbody/tr/td[3]/table/tbody/tr[2]/td/a) 

私はプリンターで投手用pitcher[0].textを印刷しようとすると、私はむしろtextより[]を取得し、任意のアイデアをどうして?

+0

htmlはxmlではありません。 BeautifulSoupを使用してhtmlを解析します。 –

+0

FUD。 lxmlはHTMLの解析には適していますが、xpathはHTML domのナビゲーションには問題ありません。 –

+0

したがって、lxml.htmlパッケージ。 –

答えて

1

問題は、最後にtbodyが元のソースに存在しません。あなたがxpathをいくつかのブラウザ経由で取得した場合、ブラウザはhtmlを有効にするために不足している要素を推測し追加することができることを覚えておいてください。

最後のtbodyを削除すると問題が解決されます。

In : import lxml.html as html 

In : site = html.parse("http://www.baseball-reference.com/players/event_hr.cgi?id=bondsba01&t=b") 

In : pitchers = site.xpath("/html/body/div[2]/div[2]/div[6]/table/tbody/tr/td[3]/table/tr[2]/td/a") 

In : pitchers[0].text 
Out: 'Terry Mulholland' 

しかし、私はこれを追加する必要があります。使用しているxpath式は非常に脆弱です。ある便利な場所に1つのdivが追加され、壊れたスクリプトが作成されました。可能であれば、idまたはclassのようなより良い参照を見つけようとすると、予想される場所を指しています。

+0

ありがとう、これは非常に役に立ちました。 tbodyが元のソースにないことをどうやって知ったのですか?ただDOMを見て? – user1082471

+0

@ user1082471:経験から推測された推測の種類。それからDOMから確認しました。私はソースの最初の 'tbody'を見て驚いたが:)。あなたは通常、ほとんどのソースで 'tbody'とは見えません。 – Avaris