1

我在解析SEC Edgar 文件时遇到问题

这是该文件的一个示例

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

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

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

3 回答 3

3

好的,有几件事是错误的:

  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
于 2011-04-30T04:32:42.153 回答
1

我建议在 IRB 练习并阅读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">]>] 

那应该让你去

于 2011-04-30T02:56:51.070 回答
1

鉴于这是在一年前提出的,答案可能是 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”的文档。

于 2012-04-16T20:34:20.950 回答