BeautifulSoup возвращает noneType - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь использовать следующий код Python для получения данных из базы данных EDGAR.

html1 = 'https://www.sec.gov/Archives/edgar/data/320193/000032019317000070/aapl-20170930.xml'
xbrl_resp = requests.get(html1)
xbrl_str = xbrl_resp.text
soup1 = BeautifulSoup(xbrl_str, 'lxml')
mytag = soup1.find('us-gaap:StockholdersEquity',{'contextRef':'FI2017Q4'})
print(mytag)

Не возвращает ничего, даже если тег существует в XML-файле. Любые предложения будут оценены

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Синтаксический анализатор XML преобразует теги xml в строчные буквы: см. Здесь: https://www.crummy.com/software/BeautifulSoup/bs4/doc/#parsing-xml. Поэтому вам необходимо выполнять поиск по строчным именам, таким как:

     mytag = soup1.find('us-gaap:stockholdersequity',contextref='FI2017Q4')
0 голосов
/ 17 апреля 2019

У меня была такая же проблема soup.find('table'), возвращающая None. Эта проблема возникла в среде, где версия пакета lxml была 3.4.4.

В другой среде с lxml версии 3.7.3 тот же код работал нормально.

Итак, я вернулся в «плохую» среду и обновил версию пакета lxml.

pip install lxml --upgrade

soup.find('table') начал работать после этого.

Надеюсь, это поможет!

Ram

0 голосов
/ 27 апреля 2018

Есть несколько проблем, с которыми вы сталкиваетесь. Сначала пропустите содержание запроса, а не текст. Во-вторых, используйте анализатор xml вместо анализатора lxml. Наконец, вы неправильно выполняете поиск в теге us-gaap: StockholdersEquity.

html1 = 'https://www.sec.gov/Archives/edgar/data/320193/000032019317000070/aapl-20170930.xml'
xbrl_resp = requests.get(html1)
xbrl_str = xbrl_resp.content
soup1 = BeautifulSoup(xbrl_str, 'xml')
mytag = soup1.find('us-gaap:StockholdersEquity',contextRef='FI2017Q4')
print(mytag)
...