给定像“What popular startup advice is plain wrong?”这样的页面,我希望能够在右上角的主题标题下提取第一个主题,在本例中为“常见错误概念”。
对我来说,在Ruby中执行此操作的最佳方法是什么?是Nokogiri还是正则表达式?大概我需要做一些HTML解析吗?
答案 0 :(得分:1)
首先,您几乎从未想过使用正则表达式来解析/提取/折叠/主轴/毁掉XML或HTML。有太多方法可以出错。正则表达式适用于某些作业,但XML / HTML提取不适合。
那就是说,这就是我用Nokogiri做的事情:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.quora.com/What-popular-startup-advice-is-plain-wrong'))
topic = doc.at('span a.topic_name span').content
puts topic
运行输出:
Common Misconceptions
代码采用了几个快捷方式,应该始终如一地工作:
OpenURI
可以轻松访问Internet资源。对于大多数简单的普通应用来说,这是我的首选。有更强大的工具,但没有一个方便。doc.at
告诉Nokogiri遍历文档,并找到第一次出现的CSS访问者“span a.topic_name span
”,该页面应该在该页面中作为第一个条目保持一致。请注意,Nokogiri支持搜索节点的一些变体:at
与search
。 at
和%
以及css_at
之类的内容会找到第一个匹配项并返回Node
,这是一个单独的标记或文本或注释。 search
,/
,这些变体返回NodeSet
,就像一个节点数组。您必须使用某种Array访问器遍历该列表或提取所需的各个节点。在上面的代码中,我可以说doc.search(...).first
来获取我想要的节点。
Nokogiri也支持使用XPath访问器,但对于大多数事情,我通常会使用CSS。它更简单,更容易阅读,但您的里程可能会有所不同。