【问题标题】:Parsing SEC Edgar XML file using Ruby into Nokogiri使用 Ruby 将 SEC Edgar XML 文件解析为 Nokogiri
【发布时间】:2011-04-30 01:47:12
【问题描述】:

我在解析 SEC Edgar files 时遇到问题

Here is an example of this file.

最终结果是我希望将<XML></XML> 之间的内容转换为我可以访问的格式。

这是我到目前为止不起作用的代码:

scud = open("http://sec.gov/Archives/edgar/data/1475481/0001475481-09-000001.txt")
full = scud.read
full.match(/<XML>(.*)<\/XML>/)

【问题讨论】:

  • “不起作用”不是很有帮助。什么不起作用?你想发生什么,结果又发生了什么?

标签: ruby xml parsing nokogiri stocks


【解决方案1】:

好的,有几个地方出错了:

  1. sec.gov/Archives/edgar/data/1475481/0001475481-09-000001.txt 不是 XML,所以 Nokogiri 对你毫无用处,除非你从文件顶部删除所有垃圾,向下到真正的 XML 开始的位置,然后修剪尾随标签以保持 XML 正确。所以,你需要先解决这个问题。
  2. 你没有说出你想从文件中得到什么。没有这些信息,我们无法推荐真正的解决方案。您需要花更多时间更好地定义问题。

下面是一段快速的代码,用于检索页面、去除垃圾并将生成的内容解析为 XML:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::XML(
  open('http://sec.gov/Archives/edgar/data/1475481/0001475481-09-000001.txt').read.gsub(/\A.+<xml>\n/im, '').gsub(/<\/xml>.+/mi, '')
)
puts doc.at('//schemaVersion').text
# >> X0603

【讨论】:

  • 我觉得我不应该做 gsub 而是匹配,但这确实有效。谢谢。
  • 您不应该这样做,但他们创建的文件类型不是 XML。您的选择是尝试正确解析而不清理它,或者清理它并获得更可预测的结果。而且,match 应该为您完成什么?它只做gsub 所做的事情。你会留下一些需要解析的东西。或者,也许你不明白match 是做什么的?
【解决方案2】:

我建议在 IRB 中练习并阅读docs for Nokogiri

> require 'nokogiri'
=> true
> require 'open-uri'
=> true
> doc = Nokogiri::HTML(open('http://sec.gov/Archives/edgar/data/1475481/0001475481-09-000001.txt'))
> doc.xpath('//firstname')
=> [#<Nokogiri::XML::Element:0x80c18290 name="firstname" children=[#<Nokogiri::XML::Text:0x80c18010 "Joshua">]>, #<Nokogiri::XML::Element:0x80c14d48 name="firstname" children=[#<Nokogiri::XML::Text:0x80c14ac8 "Patrick">]>, #<Nokogiri::XML::Element:0x80c11fd0 name="firstname" children=[#<Nokogiri::XML::Text:0x80c11d50 "Brian">]>] 

这应该会让你继续前进

【讨论】:

    【解决方案3】:

    鉴于一年前有人问过这个问题,答案可能是 OBE,但这个家伙应该做的是检查网站上的所有文件,并注意可以在以下位置找到实际提交的详细信息:

    http://sec.gov/Archives/edgar/data/1475481/000147548109000001/0001475481-09-000001-index.htm

    在此,您将看到 XML 文档是在已经被解析出来准备进一步操作的:

    http://sec.gov/Archives/edgar/data/1475481/000147548109000001/primary_doc.xml

    请注意,最后的实际文件名由文件的提交者决定,而不是由 SEC 决定。因此,您不能依赖始终为“primary_doc.xml”的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2021-01-20
      • 2014-03-18
      • 2012-11-10
      • 2021-05-03
      相关资源
      最近更新 更多