Nokogiri通常通过搜索html标签(元素)来解析信息,但如何仅从页面上写的文本中解析信息呢?
例如,我想解析中的一个粗略信息
链接:https://en.wikipedia.org/wiki/Titanic_(1997_电影)
我想从下面的文本中检索总信息:
1998年10月1日,星期四最终国内生产总值$60788188
我怎么能和野木纪里一起做到这一点?
你的问题很难回答,因为这是一个非常开放的问题。你面临着两个不同的问题。一是如何解析文本,另一个是如何找到您要查找的信息。
如何解析维基百科
我最初的方法是从HTML页面获取文本,然后使用regex查找我需要的信息。这个答案是一个很好的起点:
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"
这只是一个例子,但它应该允许你朝着正确的方向前进。
如何找到正确的信息
您可能会遇到的问题是,只有当总收入始终采用相同格式时,即毛额为$60788188,上述正则表达式才有效。regex无法智能地分析页面并计算出哪笔钱是国内总收入。
我的猜测是,这也是你的问题被否决的原因。虽然从技术上讲,从单个页面中提取信息并不困难,但编写一种智能解析不同网站以从中提取相同信息的算法却非常困难。
例如,你最好看看IMDB,它以一种非常可重复的模式列出了几乎所有电影的票房收入。查看泰坦尼克号的入口:http://www.imdb.com/title/tt0120338
如果你使用API,它会变得更容易。JSON比HTML更容易编程处理,如果你在IMDB和API上搜索,你应该找到一些资源来解释如何做到这一点。