gpt4 book ai didi

python - 如何解析表格中的行,这些行不仅由 单元格组成,而且偶尔还由 单元格组成?

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:16 24 4
gpt4 key购买 nike

我对 python 还很陌生,而且对 BeautifulSoup 也很陌生。我一直致力于使用 BeautifulSoup 创建一个网络抓取工具来进入并解析网站中的部门目录。这些目录以 HTML 表的形式构建。正如预期的那样,大多数单元格都是 td 标签;但是,偶尔有一个单元格是我也需要解析的第 th 标记。

这些页面中的大多数都是.aspx,我读到为了抓取这些页面,需要一个网络驱动程序。这是我最初的代码,我主要将 BeautifulSoup 与请求一起使用,所以我不确定这对于将其与网络驱动程序一起使用是否正确。

url = "https://webberathletics.com/staff.aspx"
driver = webdriver.Chrome(r"C:\Users\bobby\OneDrive\Documents\MyPrograms\webdrivers\chromedriver.exe")
driver.implicitly_wait(30)
driver.get(url)

soup = BeautifulSoup(driver.page_source, 'html.parser')
contacts_list = []

我将添加更多的 URL 供抓取器解析,因此我尝试使抓取器尽可能动态,这意味着它将抓取包含第 th 行的表细胞和其他没有的细胞。以下是我目前拥有的。

我希望它解析单元格,无论它是 td 还是 th

for row in soup.find_all('tr'):
cells = row.find_all('td', 'th')

if len(cells) > 0:
col1 = cells[0].text.strip()
col2 = cells[1].text.strip()
col3 = cells[2].text.strip()
col4 = cells[3].text.strip()

contact = {'col1': col1, 'col2': col2, 'col3': col3, 'col4': col4}
contacts_list.append(contact)

print(contacts_list)

目前它根本不会打印,但会运行,所以我不确定它是否正常工作。但即使它确实打印出来,我也不确定我是否正确地处理了这个问题。

最佳答案

如果您要使用 <table> 来抓取表格标签,我选择只使用 Pandas .read_html() 。辛苦你了。

from selenium import webdriver
import pandas as pd


url = "https://webberathletics.com/staff.aspx"
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.implicitly_wait(30)
driver.get(url)

tables = pd.read_html(driver.page_source)
df = tables[1]
df = df[pd.isnull(df['Image'])].drop(['Image'], axis=1)

driver.close()

输出:

print (df)

编辑:

如果您想保留这些“子标题”:

from selenium import webdriver
import pandas as pd


url = "https://webberathletics.com/staff.aspx"
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')
driver.implicitly_wait(30)
driver.get(url)

tables = pd.read_html(driver.page_source)
df = tables[1]

关于python - 如何解析表格中的行,这些行不仅由 <td> 单元格组成,而且偶尔还由 <th> 单元格组成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55937698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com