Скачать отчет о доходах с веб-страницы с помощью BeautifulSoup и преобразовать в Pandas кадр данных? - PullRequest
1 голос
/ 09 февраля 2020

Я пытаюсь получить таблицу отчета о прибылях и убытках корпорации McDonald's (MCD) "https://finance.yahoo.com/quote/MCD/financials?p=MCD". Я использовал красивый суп. html загружается, но, похоже, нет типичного тега "tr", "td" для таблицы отчета о доходах. Как преобразовать таблицу отчета о прибылях и убытках в df dataframe?

мои коды:

url="https://finance.yahoo.com/quote/MCD/financials?p=MCD"
result = requests.get(url)
result.raise_for_status()
result.encoding = "utf-8"


src = result.content
soup = BeautifulSoup(src, 'lxml')
print(soup)

array = []
for tr_tag in soup.find_all('tr'):
    b_tag = tr_tag.find_all('td')
    array.append(b_tag)
print(array)

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Как уже упоминалось в комментариях, вот ваш шаг 1:

targets = soup.find("div",{'data-reactid':'41'})
rows = []
for target in targets:
    data = target.find_all('span')
    row = []
    for d in data:
        row.append(d.text)
    rows.append(row)
for row in rows:
    print(row)

вывод:

['Total Revenue', '21,076,500', '21,025,200', '22,820,400', '24,621,900']
['Cost of Revenue', '9,961,200', '10,239,200', '12,199,600', '14,417,200']
['Gross Profit', '11,115,300', '10,786,000', '10,620,800', '10,204,700']
['Operating Expenses', 'Research Development', 'Selling General and Administrative', '2,229,400', '2,200,200', '2,231,300', '2,384,500', 'Total Operating Expenses', '2,045,500', '2,200,200', '2,231,300', '2,384,500']

et c.

1 голос
/ 09 февраля 2020

"Загрузить отчет о доходах с веб-страницы с помощью BeautifulSoup ..."

Сначала вы говорите soup.find_all('tr'); однако в таблице отчетов о прибылях и убытках нет тегов tr. На веб-сайте каждая строка имеет тег div, который затем имеет спецификацию c class. Указание class действительно может помочь вам сказать программе именно то, что вы хотите от веб-сайта. Я использовал div class из "D (tbr) fi-строки Bg c ($ hoverBgColor): h", потому что она одинакова для каждой строки таблицы. Затем вы можете использовать функцию text для получения необработанного текста с веб-сайта вместо HTML.

url="https://finance.yahoo.com/quote/MCD/financials?p=MCD"
result = requests.get(url)
result.raise_for_status()
result.encoding = "utf-8"

src = result.content
soup = BeautifulSoup(src, 'lxml')

rows = []
for i in soup.find_all('div',{'class':'D(tbr) fi-row Bgc($hoverBgColor):h'}):
    row = i.text
    rows.append(row)

print(rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...