如何从网页中提取HTML主题标题?

时间:2011-12-24 02:35:18

标签: ruby web web-crawler

给定像“What popular startup advice is plain wrong?”这样的页面,我希望能够在右上角的主题标题下提取第一个主题,在本例中为“常见错误概念”。

对我来说,在Ruby中执行此操作的最佳方法是什么?是Nokogiri还是正则表达式?大概我需要做一些HTML解析吗?

1 个答案:

答案 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

代码采用了几个快捷方式,应该始终如一地工作:

  1. 使用Ruby的OpenURI可以轻松访问Internet资源。对于大多数简单的普通应用来说,这是我的首选。有更强大的工具,但没有一个方便。
  2. doc.at告诉Nokogiri遍历文档,并找到第一次出现的CSS访问者“span a.topic_name span”,该页面应该在该页面中作为第一个条目保持一致。
  3. 请注意,Nokogiri支持搜索节点的一些变体:atsearchat%以及css_at之类的内容会找到第一个匹配项并返回Node,这是一个单独的标记或文本或注释。 search/,这些变体返回NodeSet,就像一个节点数组。您必须使用某种Array访问器遍历该列表或提取所需的各个节点。在上面的代码中,我可以说doc.search(...).first来获取我想要的节点。

    Nokogiri也支持使用XPath访问器,但对于大多数事情,我通常会使用CSS。它更简单,更容易阅读,但您的里程可能会有所不同。