Ruby 清理刮掉的Nokogiri输出
我正在刮取的内容的输出留给我以下内容:Ruby 清理刮掉的Nokogiri输出,ruby,nokogiri,web-scraping,Ruby,Nokogiri,Web Scraping,我正在刮取的内容的输出留给我以下内容: <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 lik
<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行,span类每次都不同,“我喜欢海龟”部分每次都不同
理想情况下,我只想要每一行的“我喜欢海龟”部分。有办法得到这个吗
示例10行如果您最终得到一堆HTML,如下所示:
<ul>
<li><img ...><span ...>I want this text</span></li>
<li><img ...><span ...>I want this text</span></li>
...
</ul>
这将忽略
和
中的元素,并且没有人需要关心它们碰巧有哪些类。如果您最终得到一堆类似于以下内容的HTML:
<ul>
<li><img ...><span ...>I want this text</span></li>
<li><img ...><span ...>I want this text</span></li>
...
</ul>
这将忽略
和
中的元素,并且没有人需要关心它们碰巧拥有什么类
使用doc.css()
遵循答案中的“约定”
Nokogiri允许您对Nokogiri::HTML
的结果运行XPath,就像它是一个格式良好的XML:
text_you_want = doc.xpath("//li/span").map(&:text)
p、 我之所以选择了/
而不是根/
,是因为如果你用Nokogiri::HTML
解析你的刮削剩菜,它会为你把它包装成
。将XPath作为/html/body/li/span写入片段看起来有点笨拙:)
使用doc.css()
遵循答案中的“约定”
Nokogiri允许您对Nokogiri::HTML
的结果运行XPath,就像它是一个格式良好的XML:
text_you_want = doc.xpath("//li/span").map(&:text)
p、 我之所以选择了/
而不是根/
,是因为如果你用Nokogiri::HTML
解析你的刮削剩菜,它会为你把它包装成
。将XPath作为/html/body/li/span写入片段看起来有点笨拙:)有一种方法;如果您发布这100行中的10行可能会有所帮助,因为我们可以确定正确的模式…假设您的span
,无论类别如何,总是遵循img
,并且是li
的孩子,这是正确的吗?有一种方法;如果您发布这100行中的10行可能会有所帮助,因为我们可以确定正确的模式…假设您的span
,无论类别如何,总是遵循img
,并且是li
的孩子,这是正确的吗?请您简要解释一下“map(&:text)”的工作原理,或者任何关于它的指示,&:“看起来很有趣,它是如何工作的?它似乎不是一个标准的操作符,看起来像一个魔术。@AmolPujari,google“symbol to proc”。你会发现并学到比我在评论栏中所能说的多得多的东西。@AmolPujari:简言之,x.map(&:m)
是x.map{o|o.m}
的缩写,它很好地消除了块和可变噪声,让你直截了当地说出来。你能解释一下“map(&:text)”是如何简单地工作的,或者任何关于它的指针,&:看起来很有趣,它是如何工作的?它似乎不是一个标准的操作符,看起来像一个魔术。@AmolPujari,google“symbol to proc”。你会发现并学到比我在评论栏中说的多得多的东西。@AmolPujari:简而言之,x.map(&:m)
是x.map{| o | o.m}
的缩写,它很好地消除了块和可变噪声,让你直截了当地说出来。非常感谢。我得仔细阅读地图法。非常感谢。我得仔细阅读地图法。