Python 表中抓泥元素太深

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> <

我试图用Scrapy刮表,但遇到了一个问题,由于表的结构,我得到了太多的子节点

例如,td中有一个表,该表后面是这样的:

<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,它是表的直接子项