我必须解析以下网址中存在的表数据:http://in.reuters.com/finance/stocks/companyOfficers?symbol=GOOGL.O
我有兴趣解析第一个表中的名字,该表中列出了摘要部分下的所有人。
我已经将网址读入了nokogiri,但由于我是nokogiri的新手,因此无法提取。谁能帮我解决这个问题?
我同意从Nokogiri开始并不容易。
由于您没有提供任何代码,因此我不会为您提供完整的解决方案,而是一个基本结构:
require 'nokogiri'
require 'open-uri'
def company_bosses(abbreviation)
doc = Nokogiri::HTML(open("http://in.reuters.com/finance/stocks/companyOfficers?symbol=#{abbreviation}"))
name = doc.xpath('//div[@id="sectionTitle"]').text.strip
puts name
table = doc.xpath('//tbody[@class="dataSmall"]')
puts table.to_s.include?('Eric Schmidt')
# Keep looking for the desired data inside 'table'!
# ...
end
company_bosses("GOOGL.O")
它输出:
Alphabet Inc (GOOGL.O)
true
您要查找的数据位于方法table
变量中。这是一个Nokogiri::XML::NodeSet
.
Nokogiri 文档已经足够好了,Firefox 检查器在尝试理解 HTML 结构时提供了很大的帮助(前提是浏览器没有更改它)。
require 'nokogiri'
require 'open-uri'
首先,我打开源代码并使用nokogiri对其进行解析并得到nokogiri文档。
doc = Nokogiri::HTML(open("http://in.reuters.com/finance/stocks/companyOfficers?symbol=GOOGL.O"))
现在,我仅通过 xpath 选择您感兴趣的元素。
elements = doc.xpath('//*[@id="companyNews"]/div/div[2]/table/tbody/tr/td[1]/h2/a')
最后一步是从换行符和制表中清除每个元素的文本,并将名称作为唯一值返回。
elements.map{|officer| officer.text.strip}.uniq
# => ["Eric Schmidt", "Sergey Brin", "Lawrence Page", "Ruth Porat", "Sundar Pichai", "David Drummond", "John Hennessy", "L. John Doerr", "Roger Ferguson", "Diane Greene", "Ann Mather", "Alan Mulally", "Paul Otellini", "Kavitark Shriram", "Shirley Tilghman"]
require 'open-uri'
require 'nokogiri'
doc = Nokogiri::HTML(open('http://in.reuters.com/finance/stocks/companyOfficers?symbol=GOOGL.O'))
puts doc.xpath("//div[@id='companyNews']/div[@class='module']/div[@class='moduleBody']/table/tbody/tr/td/h2[@class='officers']/a").text