- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Nokogiri 来解析来自 XML 的数据。这是数据文件的摘录:
<table>
<tr>
<th class="indent normal">Profit and loss account</th>
<td class="notefigure"></td>
<td id="currentProfitAndLossAccount" class="figure">
(<ix:nonFraction name="uk-gaap-pt:ProfitLossAccountReserve" contextRef="current-mud" unitRef="currencyUnit" format="ixt:numdotdecimal" decimals="0" sign="-" >12,345</ix:nonFraction><span class="endnegmark">)</span>
</td>
<td id="previousProfitAndLossAccount" class="figure">
(<ix:nonFraction name="uk-gaap-pt:ProfitLossAccountReserve" contextRef="previous-mud" unitRef="currencyUnit" format="ixt:numdotdecimal" decimals="0" sign="-" >67,890</ix:nonFraction><span class="endnegmark">)</span>
</td>
</tr>
</table>
这是我使用的代码:
require 'HTTParty'
require 'Nokogiri'
require 'JSON'
require 'Pry'
require 'csv'
# this is how we request the page we're going to scrape
page = File.open("D:/accounts_file.xml") { |f| Nokogiri::XML(f) }
#this is the empty array to store the output
companies_array = []
# this is where the data is parsed
page.css('table').css('th').map do |a|
post_name = a.text
companies_array.push(post_name)
end
page.css('table').css('td').map do |a|
post_name = a.text
companies_array.push(post_name)
end
# this pushes the data into the .csv file
CSV.open('D:/financial_data','w') do |csv|
csv << companies_array
end
目前,我得到一个表格标题行,后面是表格内容,但它没有与标题对齐,即使对齐了,也远非理想。
我最理想的是 <td id>
("currentProfitAndLossAccount") 后跟相应的值,在列表中:
"currentProfitAndLossAccount","12,345"
"previousProfitAndLossAccount","67,890"
带或不带分隔符。
实际上我正在尝试整理大约 20 个字段。然后将其导入我的数据库将是一件容易的事。我有 10 万个文件要导入,但我花了一个多星期的时间才将第一个文件转换为正确的格式以进行导入。
在 Ronan Lopes 的帮助下,我现在有了以下 Ruby:
require 'HTTParty'
require 'Nokogiri'
require 'JSON'
require 'Pry'
require 'csv'
# this is how we request the page we're going to scrape
page = File.open("D:/Accounts.xml") { |f| Nokogiri::HTML(f) }
#this is an empty array where we will store the output
companies_array = []
# this is where we select the data we want to isolate
page.css('nonFraction').map{|n| { n.parent.attributes["id"].value => n.text } }
###这是不工作的部分,我认为###
post_name = n
# the next push command appends whatever is in the brackets to the companies_array storage
companies_array.push(post_name)
# this will push the storage into a csv file
CSV.open('D:/accounts.csv','w') do |csv|
csv << companies_array
end
最佳答案
不知道这是否适用于您的所有表格,但对于那个表格,这可以提供您想要的(至少它会给您其他表格的想法):
我将其解析为 HTML 而不是 XML:
page = Nokogiri::HTML(File.open("D:/Accounts.xml").read)
并且,要获得您想要的值:
page.css('nonfraction').map{|n| { n.parent.attributes["id"].value => n.text } }
它会为您提供包含您想要的键/值的散列。
关于ruby-on-rails - 如何使用 Ruby 和 Nokogiri 选择数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48524339/
我在 OSX 上使用 RVM 和之前的 RBENV。我在 ./gems 中相对于我的项目路径安装了我的 gems 我正在使用 aws-sdk 并尝试使用 s3 客户端导致 nokogiri/nokog
我正在尝试使用以下版本在 Mac OS Big Sur 上构建 Rails 应用程序...... $ rails --version Rails 5.0.7.2 $ ruby --version ru
我正在尝试抓取 http://www.ign.com/games/reviews使用 Nokogiri,我想实例化与页面上每个游戏评论相对应的新评论对象。当然,我还想从每条评论中获取每个数字分数,并将
我正在编写 Lynda 的 Ruby on Rails 教程,一切都按预期进行。所有安装和一切都运行完美。 但是创建项目后,当我尝试启动服务器(cmd:rails server)时,我收到错误消息:
尝试按如下方式在生产模式下运行 rake Assets 预编译。 rake assets:precompile 它在 ubuntu 14.04(32 位)和 16.06(32 位)上运行良好。但是在
我需要一种方法来运行 nokogiri 脚本 #parser.rb require 'nokogiri' def parseit() //... end 并在 jruby 的 main.rb 下面运行
在解析缩进的 XML 时,不重要的空白文本节点是从结束标记和开始标记之间的空白创建的。例如,来自以下 XML: Tove Jani Reminder Don't forget me
Nokogiri 在我的 gem 文件中。 bundle 安装返回预期的输出: Using nokogiri (1.4.4) Your bundle is complete! Use `bundle
我安装了 Ruby 和 Nokogiri gem。在 irb 中,我尝试: require 'nokogiri' require 'open-uri' url = 'http://www.amazon
我想使用 XSL 将 XML 文档转换为 HTML,稍微修改一下,然后将其呈现出来。这基本上就是我正在做的: source = Nokogiri::XML(File.read 'source.xml'
我的 Ruby on Rails 应用程序使用 Rails 2.2.2 和 Ruby 1.8.7。 尝试运行时 RAILS_ENV=production rake gems:install 或任何佣金
在 IRB 中,当我键入 require“nokogiri”时,出现以下错误: LoadError: cannot load such file -- nokogiri 我的 gemfile 中安装了
我正在使用 DevKit 在 Windows 8.1 上运行全新安装的 Ruby 2.2.1。安装后我运行: gem install rails rails new testapp cd testap
我正在尝试安装 nokogiri,因为它是启动 rails 所必需的 $ rails s /usr/local/rvm/gems/ruby-1.9.3-p194@global/gems/bun
我终于设法解析了网站的部分内容: get '/' do url = '' data = Nokogiri::HTML(open(url)) @rows = data.css("td[val
我第一次使用 Nokogiri 搜索 HTML 文档。当我创建一个变量(并打印)时,它等于: beteween Nokogiri::HTML(open(url).read) 它似乎输出与完全相同的东西
如果我尝试安装 nokogiri,我会收到以下错误: rvmsudo gem install nokogiri ERROR: Error installing nokogiri: nokog
我在屏幕抓取 rake 任务中有以下代码 page = agent.get("https://domainname.co.uk/unit/27/logs?type=incoming&page=8")
我尝试(出于测试目的)解析 Google 商家 XML 提要,定义为: EasyOptic 2014-08-01T16:31:
如何将“foo”替换为“bar”? 来自 foo1foo2foo4foo5foo6 至 bar1bar2bar4bar5bar6 我只想替换标签内部内容,没有标签属性。 有什么想法吗? 最佳答案 re
我是一名优秀的程序员,十分优秀!