给定一个像“What popular startup advice is plain wrong?”这样的页面,我希望能够提取右上方主题标题下的第一个主题,在本例中为“常见误解”。如何从网页中提取HTML主题标题?
我在Ruby中这样做的最佳方式是什么?是否与Nokogiri或正则表达式?据推测我需要做一些HTML解析?
给定一个像“What popular startup advice is plain wrong?”这样的页面,我希望能够提取右上方主题标题下的第一个主题,在本例中为“常见误解”。如何从网页中提取HTML主题标题?
我在Ruby中这样做的最佳方式是什么?是否与Nokogiri或正则表达式?据推测我需要做一些HTML解析?
首先,您几乎从来没有想过使用正则表达式来解析/提取/折叠/旋转/切割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。它更简单,更容易阅读,但你的里程可能会有所不同。
嗨,这真的很有帮助。直到很久以前,突然间,我开始使用503 Service Unavailable(OpenURI :: HTTPError)。我假设这是网站对服务器的请求挑剔。有没有解决方法? – 2011-12-25 04:29:20
如果他们禁止了你,没有任何工作。这就是为什么按照他们的规则发挥并遵守他们的服务条款非常重要的原因。 503可能意味着他们的服务器是脱机的。 – 2011-12-25 09:00:58