Ruby Nokogiri 文本搜索不适用于 br 标签和其他标签

标签 ruby nokogiri

我在 Ruby 中使用 Nokogiri gem 时遇到了一些问题。

我想从网页上抓取地址,地址的显示方式没有固定格式。

我有一个邮政编码列表,我希望我的 Ruby 脚本返回包含邮政编码的节点,以便我可以找到地址的其余部分。

这是我在 Ruby 中得到的,带有一些示例 HTML 内容:

require 'nokogiri'
require 'open-uri'

content1 = '
<div>
    <div>
        <div>Our Address:</div>
        1 North Street
        North Town
        North County
        N21 4DD
    </div>
</div>'

doc = Nokogiri::HTML(content1)
result = doc.search "[text()*='N21 4DD']"
puts result.inspect

返回 []

我知道上面的示例是地址在 HTML 中出现的一种奇怪方式,但这是我可以显示我遇到的问题的最简单方式。这是另一个 content什么都不返回的变量:

content1 = '
<div>
    <div>Our Address:</div>
    <div>
        1 North Street<br>
        North Town<br>
        North County<br>
        N21 4DD
    </div>
</div>'

我知道 Nokogiri 可能会遇到上述问题,因为 <br>标签应该是 </br>但这在网站上很常见。

这个例子有效:

content1 = '
<div>
    <div>Our Address:</div>
    <div>
        1 North Street
        North Town
        North County
        N21 4DD
    </div>
</div>'

有人能解释一下为什么从前两个 content 找不到节点吗?上面的示例以及如何解决这个问题?

我不是在寻找可以在示例 content 中找到邮政编码的自定义解决方案上面的例子——这些只是为了演示目的。邮政编码(和地址)可以在 html 中的任何位置 – body , p , div , td , span , li等等

谢谢。

最佳答案

使用 Xpath:

doc.xpath('.//div[contains(.,"N21 4DD")]')

这仍然返回两个节点,因为有一个嵌套的 div。我不确定是否有办法在没有“我们的地址”div 的情况下获取中间 div,因为它位于同一节点中。

关于Ruby Nokogiri 文本搜索不适用于 br 标签和其他标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45019148/

相关文章:

ruby-on-rails - Rails:ActiveRecord::AssociationTypeMismatch Team() 预期,得到 String()

RubyGems 忽略 `.gemrc` ?

ruby-on-rails - rails twilio api 版本号

ruby - Hpricot/nokogiri - 解析 SVG/XML 文件以获取使用的颜色

html - 如何在 Ruby on Rails 中使用 Nokogiri 从 HTML 中查找具有代表性的图像

ruby - 我如何使用 Nokogiri 查找网页上的特定文本/单词?

ruby - Ruby 中是否有标准方法将字符串添加到每个字符串数组中?

python - 按比例将图像裁剪到最大的中心部分

ruby - 查找名称与模式匹配的元素

ruby-on-rails - Fedora16 gem install nokogiri 失败