使用 Xpath (HtmlXPathSelector) 获取父子文本
Posted
技术标签:
【中文标题】使用 Xpath (HtmlXPathSelector) 获取父子文本【英文标题】:Get both parent and child text with Xpath (HtmlXPathSelector) 【发布时间】:2012-12-27 06:30:18 【问题描述】:我正在抓取一个网站,我需要从这个 html 文档中获取数值:
<td>
<span style=" color: red; font-weight: bold;"> 1.950</span>
</td>
<td> 3.400</td>
我需要同时提取 1.950 和 3.400,但是当一个值仅在 a 中,而另一个值也有跨度时,我不知道该怎么做。有没有一种通用的方法来获取路径的父级和子级?我正在使用scrapy
框架和HtmlXPathSelector
。我可以将/td/text()
用于其中一个,将/td/span/text()
用于另一个,但我需要在一个查询中执行此操作。如何实现?
【问题讨论】:
【参考方案1】:您可以尝试使用:/td//text()
选择作为td
后代的每个文本节点
【讨论】:
【参考方案2】:我认为你有两种方法可以解决这个问题。
使用 Xpath
following-sibling::node()
另一个是迭代所有的tds(但这可能很讨厌)
我会给你一个 Xpath 的例子
span_text = hxs.select("/td/span/text()")
next = span_text.select('following-sibling::node()') #you should get 3.400 (or with this idea :P)
如果你有这个 xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<td>
<span style=" color: red; font-weight: bold;">1.950</span>
</td>
<td>3.400</td>
</root>
然后你执行这个 xpath 表达式:
//td/following-sibling::node()
您将获得 3.400
this is a good place to test xpath
【讨论】:
【参考方案3】:你可以试试这个
.select("string()").extract()
它将提取所有没有任何html标签的文本
【讨论】:
以上是关于使用 Xpath (HtmlXPathSelector) 获取父子文本的主要内容,如果未能解决你的问题,请参考以下文章