Разбор XML-файла SEC Edgar с использованием Ruby в Nokogiri - PullRequest
1 голос
/ 30 апреля 2011

У меня проблемы с анализом файлов SEC Edgar

Вот пример этого файла .

Конечный результат: я хочу, чтобы содержимое от <XML> до </XML> было в формате, к которому я могу получить доступ.

Вот мой код, который пока не работает:

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

Ответы [ 3 ]

3 голосов
/ 30 апреля 2011

Хорошо, есть пара неправильных вещей:

  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
1 голос
/ 17 апреля 2012

Учитывая, что об этом спросили год назад, ответ, вероятно, 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».

1 голос
/ 30 апреля 2011

Я рекомендую потренироваться в IRB и прочитать документы для Нокогири

> 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">]>] 

это должно помочь вам

...