gpt4 book ai didi

ruby - 如何通过 Mechanize 和 Nokogiri 抓取数据?

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:24 25 4
gpt4 key购买 nike

我正在开发一个从 http://www.screener.in/ 获取 HTML 的应用程序.

我可以输入公司名称,如“Atul Auto Ltd”并提交,然后,从 the next page ,抓取以下详细信息:“CMP/BV”和“CMP”。

我正在使用这段代码:

require 'mechanize'
require 'rubygems'
require 'nokogiri'

Company_name='Atul Auto Ltd.'
agent = Mechanize.new
page = agent.get('http://www.screener.in/')
form = agent.page.forms[0]
print agent.page.forms[0].fields
agent.page.forms[0]["q"]=Company_name
button = agent.page.forms[0].button_with(:value => "Search Company")
pages=agent.submit(form, button)
puts pages.at('.//*[@id="top"]/div[3]/div/table/tbody/tr/td[11]')
# not getting any output.

代码将我带到正确的页面,但我不知道如何查询以获得所需的数据。

我尝试了不同的方法但没有成功。

如果可能的话,有人可以给我指点一个很好的教程,它解释了如何从 HTML 页面中抓取特定的类。第一个“CMP/BV”的XPath是:

//*[@id="top"]/div[3]/div/table/tbody/tr/td[11]

但它没有给出任何输出。

最佳答案

使用 Nokogiri我会按如下方式进行:

使用 CSS 选择器

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.screener.in/company/?q=Atul+Auto+Ltd.'))

doc.class
# => Nokogiri::HTML::Document
doc.css('.table.draggable.table-striped.table-hover tr.strong td').class
# => Nokogiri::XML::NodeSet

row_data = doc.css('.table.draggable.table-striped.table-hover tr.strong td').map do |tdata|
tdata.text
end

#From the webpage I took the below value from the table
#*Peer Comparison Top 7 companies in the same business*

row_data
# => ["6.",
# "Atul Auto Ltd.",
# "193.45",
# "8.36",
# "216.66",
# "3.04",
# "7.56",
# "81.73",
# "96.91",
# "17.24",
# "2.92"]

从网页上看表格,CMP/BVCMP 分别是第十二和第三列。现在我可以从数组 row_data 中获取数据。所以 CMP 是第二个索引,CMP/BV 是数组 row_data 的最后一个值。

row_data[2] # => "193.45" #CMP
row_data.last # => "2.92" #CMP/BV

使用 XPATH

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://www.screener.in/company/?q=Atul+Auto+Ltd.'))

p doc.at_xpath("//*[@id='peers']/table/tbody/tr[6]/td[3]").text
p doc.at_xpath("//*[@id='peers']/table/tbody/tr[6]/td[10]").text
# >> "193.45" #CMP
# >> "17.24" #CMP/BV

关于ruby - 如何通过 Mechanize 和 Nokogiri 抓取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com