代码之家  ›  专栏  ›  技术社区  ›  Crystal Kwan

不能把html表格变成漂亮的汤吗

  •  0
  • Crystal Kwan  · 技术社区  · 2 年前

    正在尝试从此处删除IPO表数据: https://www.iposcoop.com/last-12-months/

    这是我的代码:

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    
    url = 'https://www.iposcoop.com/last-12-months/'
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'lxml')
    table1 = soup.find("table",id='DataTables_Table_0')
    table1_data = table1.tbody.find_all("tr")
    table1
    

    然而,表1不是类型。为什么?有解决办法吗?我读过相关问题,但iframe似乎不是答案。

    1 回复  |  直到 2 年前
        1
  •  4
  •   Md. Fazlul Hoque    2 年前

    您可以使用pandas获取表数据

    import pandas as pd
    import requests 
    from bs4 import BeautifulSoup
    
    url='https://www.iposcoop.com/last-12-months'
    req=requests.get(url).text
    soup=BeautifulSoup(req,'lxml')
    table=soup.select_one('.standard-table.ipolist')
    table_data =pd.read_html(str(table))[0]
    print(table_data)
    

    输出:

                     Company  Symbol  ...   Return SCOOP Rating
    0                                         Akanda Corp.    AKAN  ...   85.00%          S/O     
    1    The Marygold Companies, Inc. (aka Concierge Te...    MGLD  ...    9.50%          S/O     
    2                            Blue Water Vaccines, Inc.     BWV  ...  343.33%          S/O     
    3            Meihua International Medical Technologies    MHUA  ...  -33.00%          S/O     
    4                                        Vivakor, Inc.    VIVK  ...  -49.40%          S/O     
    ..                                                 ...     ...  ...      ...          ...     
    355                Khosla Ventures Acquisition Co. III    KVSC  ...   -2.80%          S/O     
    356           Dragoneer Growth Opportunities Corp. III    DGNU  ...   -2.40%          S/O     
    357                                        Movano Inc.    MOVE  ...  -43.60%          S/O     
    358         Supernova Partners Acquisition Company III  STRE.U  ...    0.10%          S/O     
    359                           Universe Pharmaceuticals     UPC  ...  -74.00%          S/O     
    
    [360 rows x 10 columns]
    
        2
  •  2
  •   DollarAkshay    2 年前

    虽然F.Hoque的答案为您提供了一个解决方案,但它似乎并没有回答代码抛出错误的原因。

    您正在尝试查找id为的表 DataTables_Table_0 .打开 page 在浏览器中,可以看到具有给定id的元素存在。但是,如果在禁用Javascript后打开同一页面,可以看到该id不再存在于表中。该id由某个javascript模块分配。

    BeautifulSoup只能获取基本HTML,而不运行javascript模块。所以你有两个解决方案:

    1. 使用基本HTML中存在的选择器(在本例中) .standard-table.ipolist )
    2. 使用selenium运行Javascript并获取浏览器中显示的HTML