0

我正在抓取的输出给我留下了这个:

<li><img class="static" src="pic.jpg"><span id="dynamic1" class="the text">I like turtles</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic2" class="the text">I like bears</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic3" class="the text">I like ruby</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic4" class="the text">I like oranges</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic5" class="the text">I like keyboards</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic6" class="the text">I like movies</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic7" class="the text">I like Android</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic8" class="the text">I like Mac</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic9" class="the text">I like music</span></li>
<li><img class="static" src="pic.jpg"><span id="dynamic10" class="the text">I like boats</span></li>

大约有 100 行这样的跨度类每次都不同,并且“我喜欢海龟”部分每次都不同。

理想情况下,我只想要每行的“我喜欢海龟”部分。有没有办法得到这个?

示例 10 行

4

2 回答 2

2

如果你最终得到一堆这样的 HTML:

<ul>
    <li><img ...><span ...>I want this text</span></li>
    <li><img ...><span ...>I want this text</span></li>
    ...
</ul>

然后您可以提取<li>s ,然后从中提取文本,<li>同时忽略其中的标签:

texts_you_want = doc.css('li').map(&:text)

这将忽略s 中的<img><span>元素,<li>并且没有人需要关心它们碰巧有什么类。

于 2012-06-02T02:42:18.283 回答
2

遵循“约定”的答案doc.css()

Nokogiri 允许您在结果上运行 XPath,就Nokogiri::HTML好像它是一个格式良好的 XML:

text_you_want = doc.xpath("//li/span").map(&:text)

ps 我这样做的原因//而不是 root/是因为如果你用它解析你的抓取剩菜,Nokogiri::HTML它将<html><body>为你包装它。将 XPath 写入您的片段/html/body/li/span看起来有点尴尬:)

于 2012-06-02T02:52:25.070 回答