Python爬取HTML表格:如何递归获取td节点下的文本内容?
解决HTML表格td标签下递归获取所有文本的问题
嘿,我懂你现在的困惑!你用./text()只能拿到td标签直接子节点里的文本,没法递归获取它下面嵌套元素(比如<span>、<a>这类)里的内容对吧?这是因为XPath里的./text()只会匹配当前节点的直接文本子节点,不会深入到子元素里去。
给你两种实用的解决办法,直接替换你代码里的findtextforme()就行:
方法1:用XPath的string()函数
这个函数会返回当前节点及其所有后代节点的所有文本内容拼接后的结果,用法很简单:
for row in rows: cols = row.xpath("./td") texts = [col.xpath("string(.)") for col in cols]
它会自动把td下所有嵌套元素里的文本都整合在一起,不过要注意如果文本里有多余的空格、换行,可能需要后续用strip()或者正则清理一下。
方法2:用//text()递归获取所有文本节点再拼接
如果你想更灵活地处理每个文本片段(比如过滤空文本、自定义拼接规则),可以用//text()拿到所有后代文本节点,再手动拼接:
for row in rows: cols = row.xpath("./td") texts = [''.join([text.strip() for text in col.xpath(".//text()") if text.strip()]) for col in cols]
这种方式会先把每个文本节点的内容去掉前后空格,过滤掉空的文本片段,再拼接成完整的字符串,适合处理那些有很多换行、空格的表格内容。
举个例子,如果你的td结构是这样的:
<td> 基础文本 <span>嵌套的span文本</span> <a href="#">链接里的文本</a> </td>
- 用
string(.)会得到"基础文本嵌套的span文本链接里的文本"(可能带原有的换行空格) - 用方法2的处理会得到
"基础文本嵌套的span文本链接里的文本"(已经去掉了多余空格)
这样就能完美替代你假想的findtextforme()功能啦!
内容的提问来源于stack exchange,提问作者ytu
相关产品推荐
相关产品推荐

