2011-08-13 17 views
1

私はスクリーン・スクレイピング含むHTMLページを:xpathとテキストの一致?

<table border=1 class="searchresult" cellpadding=2> 
<tr><th colspan=2>Last search</th></tr> 
<tr><th align=left>Search term</th><td>xxxxxx</td></tr> 
<tr><th align=left>Result</th><td>yyyyyyyy/td></tr> 
</table> 

は私が私に「YYYYYYYY」を含むデータセルを取得するXPath式を書きたいです。

.//table[@class='searchresult']//tr/th 

私はテーブルのすべてのテーブルヘッダーノードのリストを取得しています。私はそれらをユーザコードで繰り返し、.textが "Results"であるものを見つけ、その上で.getnext()を呼び出してテーブルデータを取得することができます。しかし、より具体的なXPATHパターンを記述することで、これを行うよりクリーンな方法がありますか?それはあるはずのようですが、私はXPATHのまわりでそれほど頭を上げているわけではありません。

問題がある場合は、Pythonでlxmlを使用しています。

答えて

1

.//tables[@class='searchresult'////tr/td[preceding-sibling::th]は、必要なものを与えるかもしれません。特に画面スクレイピングの目的のために、このような半自動的に作成するXPathステートメント、上

二つの包括的な論文がここで見つけることができます:

http://tobiasanton.com/Tobias_Anton/Academia.html

+1

よりおそらく、あなたが探しているのXPath文は次のようになります。.//table[@class = '検索結果'] // tr/td [先行兄弟::ノード[1] = "結果"] –

0

使用

//table/tr[last()]/td 

この選択を任意のtrの子である任意のtd要素tr123の子このXHTML文書ではです。

XHTML文書にtableが1つのみ存在するかどうかによって、複数のtd要素を選択できます。 要素が複数ある場合は、この式をより正確にする必要があります。。例えば

問題のtableは、文書の最初のであれば、を使用します。

(//table)[1]/tr[last()]/td 
関連する問題