Python 表中抓泥元素太深
我试图用Scrapy刮表,但遇到了一个问题,由于表的结构,我得到了太多的子节点 例如,td中有一个表,该表后面是这样的:Python 表中抓泥元素太深,python,xpath,web-scraping,html-table,scrapy,Python,Xpath,Web Scraping,Html Table,Scrapy,我试图用Scrapy刮表,但遇到了一个问题,由于表的结构,我得到了太多的子节点 例如,td中有一个表,该表后面是这样的: <table> <tr> <td> Text I want </td> <td> <table> <tr> <
<table>
<tr>
<td>
Text I want
</td>
<td>
<table>
<tr>
<td>
Text I do not want
</td>
</tr>
</td>
</table>
它获取每个tr的第一个td中的文本-这正是我想要的-但是一些tds有自己的表!不要问我为什么他们这样构建这个东西,或者为什么没有一个类或id比表级别本身更深,但事实就是这样。所以我还要返回表中第一个td中的文本。。。这是我现在还不想要的后期tds
在没有ID或类的情况下,我如何更明确地表示只需要第一个td的文本,而不需要表中更深的内容?有几个选项可以继续: 使用顶级td no absolute//的相对xpath,这将导致递归搜索:
/path_to_table/table/tr/td[1]/text()
检查td在其祖先中是否只有一个表:
//td[count(ancestor::table) = 1]/text()
希望能有所帮助。有几个选项可以继续: 使用顶级td no absolute//的相对xpath,这将导致递归搜索:
/path_to_table/table/tr/td[1]/text()
检查td在其祖先中是否只有一个表:
//td[count(ancestor::table) = 1]/text()
希望能有所帮助。我想这是因为您的查询中有以下内容:
table//td[1]/text()
//td意味着找到任何级别儿童的所有td
将其更改为:
table/tr/td[1]/text()
或者如果你有身体
这将得到tds,tds是表的直接子项。我想这是因为您的查询中有以下内容:
table//td[1]/text()
//td意味着找到任何级别儿童的所有td
将其更改为:
table/tr/td[1]/text()
或者如果你有身体
这将得到tds,它是表的直接子项