Чтение таблицы 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
Другие вопросы по тегам