我正在抓的东西的输出让我留下了这个:
<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行
答案 0 :(得分:2)
如果您最终得到一堆像这样的HTML:
<ul>
<li><img ...><span ...>I want this text</span></li>
<li><img ...><span ...>I want this text</span></li>
...
</ul>
然后,您可以提取<li>
,然后从每个<li>
中提取文本,同时忽略其中的标记:
texts_you_want = doc.css('li').map(&:text)
这会忽略<img>
内的<span>
和<li>
元素,没有人需要关心他们碰巧会遇到什么类。
答案 1 :(得分:2)
遵循&#34;惯例&#34;来自
doc.css()
的答案。
Nokogiri允许您对Nokogiri::HTML
的结果运行XPath,就好像它是一个格式良好的XML:
text_you_want = doc.xpath("//li/span").map(&:text)
P.S。我执行//
而不是根/
的原因是因为如果您使用Nokogiri::HTML
解析抓取剩余部分,它会将其包装到<html><body>
中。将XPath写入您的片段/html/body/li/span
看起来有点尴尬:)