3

我正在抓取一个网站,我需要从此 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()可以用于另一个,但我需要在一个查询中完成。如何做到这一点?

4

3 回答 3

5

您可以尝试使用 :/td//text()选择作为 a 的后代的每个文本节点td

于 2013-01-12T23:46:43.007 回答
2

我认为你有两种方法可以解决这个问题。

使用 Xpath

跟随兄弟::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

这是测试 xpath 的好地方

于 2013-01-12T23:50:15.003 回答
1

你可以试试这个

.select("string()").extract()

它将提取所有没有任何 html 标签的文本

于 2013-01-14T08:33:32.103 回答