Я столкнулся с проблемой в моем программировании, которая поставила меня в тупик.
Я пытаюсь получить доступ к данным, хранящимся во множестве старых файлов в формате HTML, сохраненных в виде текста. Однако при сохранении HTML-кода теряются его отступы, вкладки, иерархия, как бы вы это ни называли. Пример этого можно найти ниже.
......
<tr class="ro">
<td class="pl " style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="top.Show.showAR( this, 'defref_us-gaap_RevenueFromContractWithCustomerExcludingAssessedTax', window );">Net sales</a></td>
<td class="nump">$ 123,897<span></span>
</td>
<td class="nump">$ 122,136<span></span>
</td>
<td class="nump">$ 372,586<span></span>
</td>
<td class="nump">$ 360,611<span></span>
</td>
</tr>
<tr class="re">
<td class="pl " style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="top.Show.showAR( this, 'defref_us-gaap_OtherIncome', window );">Membership and other income</a></td>
<td class="nump">997<span></span>
</td>
<td class="nump">1,043<span></span>
</td>
<td class="nump">3,026<span></span>
</td>
<td class="nump">3,465<span></span>
</td>
</tr>
<tr class="rou">
<td class="pl " style="border-bottom: 0px;" valign="top"><a class="a" href="javascript:void(0);" onclick="top.Show.showAR( this, 'defref_us-gaap_Revenues', window );">Total revenues</a></td>
<td class="nump">124,894<span></span>
</td>
<td class="nump">123,179<span></span>
</td>
<td class="nump">375,612<span></span>
</td>
<td class="nump">364,076<span></span>
</td>
</tr>
Обычно я бы использовал здесь Beautiful Soup и приступил к разбору данных таким образом, но я не нашел хорошего рабочего процесса, поскольку технически здесь нет иерархии; Я не могу сказать BS, чтобы он смотрел на что-то другое, кроме самого документа, который огромен и может занимать слишком много времени (см. Следующее утверждение).
Мне также нужно найти исчерпывающее решение, а не быстрое решение, потому что у меня есть сотни, если не тысячи, тех же самых HTML-текстовых файлов для анализа.
Итак, мой вопрос здесь, если я хочу вернуть во всех файлах первое число «Членство и другие доходы» (в данном случае 997), как я могу это сделать?
Два файла с примерами можно найти здесь:
(https://www.sec.gov/Archives/edgar/data/1800/0001104659-18-065076.txt) (https://www.sec.gov/Archives/edgar/data/1084869/0001437749-18-020205.txt)
РЕДАКТИРОВАТЬ - 4/16
Спасибо всем за ответы! Я написал код, который возвращает теги, которые я ищу.
import requests
from bs4 import BeautifulSoup
data = requests.get('https://www.sec.gov/Archives/edgar/data/320193/0000320193-18-000070.txt')
# load the data
soup = BeautifulSoup(data.text, 'html.parser')
# get the data
for tr in soup.find_all('tr', {'class':['rou','ro','re','reu']}):
db = [td.text.strip() for td in tr.find_all('td')]
print(db)
Проблема в том, что существует тонна возвратов, и большинство из них не содержит ничего полезного Есть ли способ фильтрации на основе прародителя этих тегов? Я попробовал тот же подход, что и выше, используя заголовок, заголовок, тело и т. Д., Но я не могу получить BS для идентификации FILENAME ..
<DOCUMENT>
<TYPE>XML
<SEQUENCE>14
**<FILENAME>R2.htm**
<DESCRIPTION>IDEA: XBRL DOCUMENT
<TEXT>
<html>
<head>
<title></title>
.....removed for brevity
</head>
<body>
.....removed for brevity
<td class="text"> <span></span>
</td>
.....removed for brevity
</tr>