How to retrieve gross information from a wikipedia movie page with nokogiri (ruby)

时间:2017-10-08 07:50:33

标签: ruby nokogiri

Nokogiri usually parses information by searching html tags(elements), but how is it possible to parse information just from the text written on the page?

For example, I would like to parse a gross information from

Link: https://en.wikipedia.org/wiki/Titanic_(1997_film)

I want to retrieve the gross information from the text below:

Thursday, October 1, 1998 with a final domestic gross of $600,788,188

How can I do this with nokogiri?

1 个答案:

答案 0 :(得分:1)

你的问题很难回答,因为这是一个非常开放的问题。你面临着两个不同的问题。一个是如何解析文本,另一个是如何找到您要查找的信息。

如何解析维基百科

我最初的方法是从HTML页面获取文本,然后使用正则表达式查找我需要的信息。 This answer是一个很好的起点:

html = Nokogiri::HTML(IO.read 'myfile.html')
text  = html.at('body').inner_text

首先使用Nokogiri获取HTML页面(在您的情况下从URL获取),然后使用inner_text获取该页面上的文本。获得文本后,您可以使用任何可以从字符串中提取信息的方法。我会使用正则表达式:

> /.*gross of \$([0-9,]+).*/.match(text)[1]
=> "600,788,188"

这只是一个例子,但它应该允许你朝正确的方向移动。

如何找到正确的信息

对您而言可能存在的问题是上述正则表达式仅在总收入始终采用相同格式时才有效,即总计$ 600,788,188 。正则表达式无法智能地分析页面并计算出国内总收入中的金额。

我的猜测是,这也是为什么你的问题被投票的原因。虽然从单一页面提取信息在技术上并不困难,但编写一种智能解析不同网站以从中提取相同信息的算法是非常困难的。

例如,您可能会更好地关注IMDB,它以非常可重复的模式列出几乎所有电影的 Box Office 收入。查看泰坦尼克号的条目:http://www.imdb.com/title/tt0120338

如果使用API​​,会更容易。 JSON比HTML更容易以编程方式处理,如果你谷歌用于IMDB和API,你应该找到一些资源来解释如何执行此操作。