Я хочу просканировать форму SEC Edgar 13F (в формате txt) и разобрать ее в pandas.DataFrame
,
исходную ссылку на данные: https://www.sec.gov/Archives/edgar/data/1067983/000119312512060928/0001193125-12-060928.txt
Я пытаюсь использовать bs4 для извлечения таблицыкак это:
from bs4 import BeautifulSoup
def get_page(url):
url_client = urlopen(url)
page = url_client.read()
url_client.close()
return page
history_url = 'https://www.sec.gov/Archives/edgar/data/1067983/000119312513060317/0001193125-13-060317.txt'
txt_soup = BeautifulSoup(getPage(history_url), 'xml')
затем я извлекаю таблицу из супа:
table = txt_soup.find_all('TABLE')[0]
table_header = table.contents[1].contents[0]
table_data = table.contents[1].contents[1]
table_data
выглядит так:
<S> <C> <C> <C> <C> <C> <C> <C> <C> <C>
AMERICAN
EXPRESS CO COM 025816109 112,209 1,952,142 Shared-Defined 4 1,952,142 - -
AMERICAN
EXPRESS CO COM 025816109 990,116 17,225,400 Shared-Defined 4, 5 17,225,400 - -
AMERICAN
EXPRESS CO COM 025816109 48,274 839,832 Shared-Defined 4, 7 839,832 - -
AMERICAN
EXPRESS CO COM 025816109 111,689 1,943,100 Shared-Defined 4, 8, 11 1,943,100 - -
AMERICAN
EXPRESS CO COM 025816109 459,532 7,994,634 Shared-Defined 4, 10 7,994,634 - -
AMERICAN
EXPRESS CO COM 025816109 6,912,308 120,255,879 Shared-Defined 4, 11 120,255,879 - -
AMERICAN
EXPRESS CO COM 025816109 80,456 1,399,713 Shared-Defined 4, 13 1,399,713 - -
ARCHER DANIELS
MIDLAND CO COM 039483102 163,151 5,956,600 Shared-Defined 4, 5 5,956,600 - -
Теперь я хочу преобразоватьэтот str в pandas.DataFrame
, я попытался использовать:
from io import StringIO
pd.read_csv(StringIO(table_data.text), header=None)
Этот код не выполнен и возвращает ошибку:
ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 6
Как правильно проанализировать этот вид таблицы txt?Есть ли лучший способ сделать это?