【发布时间】:2021-05-13 10:38:05
【问题描述】:
我正在尝试将多个 html 表转换为 pandas 数据框, 对于这个任务,我定义了一个函数来将所有这些 html 表作为 pandas 数据框返回,
然而,当函数返回一个空列表 [] 时,它的想法是它返回一个 pandas 数据帧。
这是我迄今为止尝试过的:
以列表的形式获取所有需要的链接
import requests
from bs4 import BeautifulSoup
import lxml
import html5lib
import pandas as pd
import string
### defining a list for all the needed links ###
first_url='https://www.salario.com.br/tabela-salarial/?cargos='
second_url='#listaSalarial'
allTheLetters = string.ascii_uppercase
links = []
for letter in allTheLetters:
links.append(first_url+letter+second_url)
定义一个函数
### defining function to parse html objects ###
def getUrlTables(links):
for link in links:
# requesting link, parsing and finding tag:table #
page = requests.get(link)
soup = BeautifulSoup(page.content, 'html.parser')
tab_div = soup.find_all('table', {'class':'listas'})
# writing html files into directory #
with open('listas_salariales.html', "w") as file:
file.write(str(tab_div))
file.close
# reading html file as a pandas dataframe #
tables=pd.read_html('listas_salariales.html')
return tables
测试输出
getUrlTables(links)
[]
我在getUrlTables() 中遗漏了什么吗?
有没有更简单的方法来完成这项任务?
【问题讨论】:
-
1.您正在循环浏览链接并在最后一个链接中保存表到文件(所有其他文件都被丢弃)。 2. 这将不是一个格式良好的 HTML 文档(没有 html 或 body 元素) - 您的 html 文件看起来如何作为文本以及当您在浏览器中打开它时它看起来如何?
-
@Rob Raymond,确实,可能是可以迭代这些 html 的额外行;它看起来一样,但不像我想要的桌子,在任何一个......
标签: python html pandas web-scraping