【问题标题】:How can I use Nokogiri to find specific text/words on a webpage?如何使用 Nokogiri 在网页上查找特定文本/单词?
【发布时间】:2012-03-09 17:13:19
【问题描述】:

我是 nokogiri 的新手,但看起来这将是我用来抓取网页的工具。我正在寻找网页上的特定字词。这些词是“有效”、“满足要求”和“不满足要求”。我正在使用 watir 来浏览网站。我目前有:

page = Nokogiri::HTML.parse(browser.html)

获取 html,但我不知道从哪里开始。

感谢您的帮助!

【问题讨论】:

  • 您可以将通过 nokogiri 获得的文本存储在变量中,并针对您需要的关键字进行正则表达式匹配,即“有效”,...
  • 如果单词位于标记元素中,您会发现它更容易,例如<p id="status"></p>,你可以在这里搜索元素,然后通过.inner_text获取值。

标签: ruby parsing nokogiri watir


【解决方案1】:

如果您使用 Watir 来驱动网站,我建议您使用 Watir 来检查文本。您可以使用以下方法获取页面上的所有文本:

ie.text      #Where ie is a Watir::IE

然后您可以检查它是否包含这些单词(通过与正则表达式进行比较):

if ie.text =~ /Valid|Requirements Met|Requirements Not/
  #Do something if the words are on the page
end

也就是说,如果您正在查找特定的文本位,您可以使用 Watir 专门查找这些元素(并避免解析文本或 html)。如果您可以提供您正在处理的内容的 HTML 示例,我们可以帮助您找到更强大的解决方案。

【讨论】:

  • 这太完美了。我想多了(典型的我)。我使用了正则表达式的变体,现在我得到了我需要的输出!
【解决方案2】:

我不确定你为什么同时使用这两种方法。如果您只想检查文本,您可以使用“net/http”或机械化获取页面。无论如何,您可以使用 browser.text.match 'Valid' 检查 watir 中的文本,使用 page.text.match 'Valid' 检查 nokogiri 也是如此。

【讨论】:

  • 我先尝试了机械化,但它不支持 javascript,所以我无法“单击”按钮。所以,我切换到 watir,它工作得很好。
【解决方案3】:

您还应该能够使用贾斯汀回答中的 .text 方法以及标准的 ruby​​ 字符串 .include?返回 true 或 false 的方法。

if browser.text.include? /Valid|Requirements Met|Requirements Not/  
  #code to execute if text found
else
  #code to execute if text not found
end

这也使得单行验证步骤变得容易,如果这是你所追求的

如果使用 rspec/cucumber

browser.text.should include /Valid|Requirements Met|Requirements Not/

如果使用 test:Unit

assert browser.text.include? /Valid|Requirements Met|Requirements Not/

【讨论】:

  • 我认为这是可能的,但是当我尝试时,我得到了“无法将正则表达式转换为字符串”。我是否缺少允许.include 的东西?使用正则表达式?
  • .include?那么可能不允许使用正则表达式,因此其他方法可能会更容易,因为如果您只能使用带有 .include 的字符串?那么你最终会得到一个三路 OR 与贾斯汀的答案相比可能有点麻烦
猜你喜欢
  • 2023-03-16
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2020-04-14
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多