如何使用 nokogiri 从维基百科电影页面检索总信息 (ruby)
How to retrieve gross information from a wikipedia movie page with nokogiri (ruby)
Nokogiri通常通过搜索html个标签(元素)来解析信息,但是怎么可能只从页面上写的文本来解析信息呢?
比如我想解析一个粗略的信息来自
Link: https://en.wikipedia.org/wiki/Titanic_(1997_film)
我想从下面的文本中检索总信息:
1998 年 10 月 1 日,星期四,最终国内票房收入为 600,788,188 美元
如何使用 nokogiri 执行此操作?
你的问题很难回答,因为这是一个非常开放的问题。你面临着两个不同的问题。一个是如何解析文本,另一个是如何找到你要找的信息。
如何解析维基百科
我最初的做法是从 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,它列出了几乎所有电影的 票房 收入,并且具有非常可重复的模式。查看泰坦尼克号条目:http://www.imdb.com/title/tt0120338
如果使用 API 会更容易。 JSON 比 HTML 更容易以编程方式处理,如果您 google 用于 IMDB 和 API,您应该找到一些解释如何执行此操作的资源。
Nokogiri通常通过搜索html个标签(元素)来解析信息,但是怎么可能只从页面上写的文本来解析信息呢?
比如我想解析一个粗略的信息来自
Link: https://en.wikipedia.org/wiki/Titanic_(1997_film)
我想从下面的文本中检索总信息:
1998 年 10 月 1 日,星期四,最终国内票房收入为 600,788,188 美元
如何使用 nokogiri 执行此操作?
你的问题很难回答,因为这是一个非常开放的问题。你面临着两个不同的问题。一个是如何解析文本,另一个是如何找到你要找的信息。
如何解析维基百科
我最初的做法是从 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,它列出了几乎所有电影的 票房 收入,并且具有非常可重复的模式。查看泰坦尼克号条目:http://www.imdb.com/title/tt0120338
如果使用 API 会更容易。 JSON 比 HTML 更容易以编程方式处理,如果您 google 用于 IMDB 和 API,您应该找到一些解释如何执行此操作的资源。