将文本与xpath匹配?
我正在屏幕上抓取一个HTML页面,其中包含:将文本与xpath匹配?,xpath,lxml,Xpath,Lxml,我正在屏幕上抓取一个HTML页面,其中包含: <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>
<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>
这将获得表中所有表头节点的列表。我可以在用户代码中迭代它们,找到.text为“Results”的那个,然后调用.getnext()来获取表数据。但是,有没有更干净的方法来编写更具体的XPATH模式呢?似乎应该有,但我还没有弄清楚XPATH是如何实现的
如果有必要的话,我会用Python和lxml来实现这一点。//table[@class='searchresult']//tr/td[previous sibling::th]可能会满足您的需要 下面可以找到两篇关于半自动创建XPath语句的综合性文章,这篇文章专门用于屏幕抓取:
//table[@class='searchresult']///tr/td[previous sibling::th]可能会满足您的需要 下面可以找到两篇关于半自动创建XPath语句的综合性文章,这篇文章专门用于屏幕抓取: 使用:
//table/tr[last()]/td
(//table)[1]/tr[last()]/td
这将选择任何td
元素,该元素是任何tr
的子元素,该子元素是此XHTML文档中任何表
的最后一个子元素
这可能会选择多个td
元素,具体取决于XHTML文档中是否只有一个表如果存在多个表
元素,则需要使此表达式更精确
例如,如果所讨论的表是文档中的第一个,请使用
:
//table/tr[last()]/td
(//table)[1]/tr[last()]/td
使用:
//table/tr[last()]/td
(//table)[1]/tr[last()]/td
这将选择任何td
元素,该元素是任何tr
的子元素,该子元素是此XHTML文档中任何表
的最后一个子元素
这可能会选择多个td
元素,具体取决于XHTML文档中是否只有一个表如果存在多个表
元素,则需要使此表达式更精确
例如,如果所讨论的表是文档中的第一个,请使用
:
//table/tr[last()]/td
(//table)[1]/tr[last()]/td
更可能的是,您要查找的XPath语句可能是:。//table[@class='searchresult']//tr/td[previous sibling::node[1]=“Result”]更可能的是,您要查找的XPath语句可能是:。//table[@class='searchresult']//tr td[previous sibling::node[1]=“Result”]