Чтение таблицы HTML NASDAQ на фрейме данных
Я получил самый последний список торгуемых компаний из NASDAQ с этим кодом, однако я хотел бы, чтобы результаты отображались во фрейме данных, а не просто в списке со всей другой информацией, которая может мне не понадобиться.
Есть идеи, как этого достичь? Спасибо
Разбор последней компании NASDAQ
from bs4 import BeautifulSoup
import requests
r=requests.get('https://www.nasdaq.com/screening/companies-by
industry.aspx
exchange=NASDAQ&sortname=marketcap&sorttype=1&pagesize=4000')
data = r.text
soup = BeautifulSoup(data, "html.parser")
table = soup.find( "table", {"id":"CompanylistResults"} )
for row in table.findAll("tr"):
for cell in row("td"):
print (cell.get_text().strip())
1 ответ
Похоже, вы ищете метко с именем read_html, хотя вам нужно поиграть, пока вы не получите то, что вы хотите. В твоем случае:
>>> import pandas as pd
>>> df=pd.read_html(table.prettify(),flavor='bs4')[0]
>>> df.columns = [c.strip() for c in df.columns]
Смотрите вывод ниже.
Первая строка - это то, что выполняет работу, а вторая просто удаляет все эти надоедливые пробелы и новые строки в вашем заголовке. Похоже, там есть скрытый ADR TSO
что кажется бесполезным, так что вы можете отказаться от него, если вы не знаете, что это такое. Может также иметь смысл отбрасывать все четные строки, поскольку они, насколько я могу судить, являются просто продолжением нечетных строк и бесполезных ссылок. В одной строке:
>>> df = df.drop(['ADR TSO'], axis=1) #Drop useless column
>>> df1= df[::2] #To get rid of even rows
>>> df2= df[~df['Name'].str.contains('Stock Quote')].head() #By string filtration if we are not sure about the odd/even thing
Вывод оригинальной головы просто для галочки:
>>> df.head()
Name Symbol Market Cap \
0 Amazon.com, Inc. AMZN $802.18B
1 AMZN Stock Quote AMZN Ratings AMZN Stock Report NaN NaN
2 Microsoft Corporation MSFT $789.12B
3 MSFT Stock Quote MSFT Ratings MSFT Stock Report NaN NaN
4 Alphabet Inc. GOOGL $740.3B
ADR TSO Country IPO Year \
0 NaN United States 1997
1 NaN NaN NaN
2 NaN United States 1986
3 NaN NaN NaN
4 NaN United States n/a
Subsector
0 Catalog/Specialty Distribution
1 NaN
2 Computer Software: Prepackaged Software
3 NaN
4 Computer Software: Programming, Data Processing
Выход очищенdf.head()
:
Name Symbol Market Cap Country IPO Year \
0 Amazon.com, Inc. AMZN $802.18B United States 1997
2 Microsoft Corporation MSFT $789.12B United States 1986
4 Alphabet Inc. GOOGL $740.3B United States n/a
6 Alphabet Inc. GOOG $735.24B United States 2004
8 Apple Inc. AAPL $720.3B United States 1980
Subsector
0 Catalog/Specialty Distribution
2 Computer Software: Prepackaged Software
4 Computer Software: Programming, Data Processing
6 Computer Software: Programming, Data Processing
8 Computer Manufacturing