python读取本地html文件表格数据保存为csv格式

您所在的位置:网站首页 如何提取网页中的表格文件 python读取本地html文件表格数据保存为csv格式

python读取本地html文件表格数据保存为csv格式

2023-08-01 19:22| 来源: 网络整理| 查看: 265

废话不多说,直接入正题,以下是我将要爬取的html文件部分内容:

文件中有10个样本信息的表格数据,爬取每个表格中的miRNA family 和count 列。

1、读取html import urllib.request url = 'file:///D:/***.html' html = urllib.request.urlopen(url).read() print(html) # 打印查看

url是指html的文件地址,你可以直接打开html文件,复制网站粘贴即可,读取的是html源代码信息赋给变量html。

可以看到读取获得的html是一个很长的字符串,这种形式是不方便我们提取关键信息的,因此有必要将其重新解析为html格式。

from bs4 import BeautifulSoup soup = BeautifulSoup(html, "html.parser") print(soup)

2、提取关键信息 1)查看源代码

打开html文件,右击选择审查元素,点击左上角箭头图标,将光标移到表格内容上。

仔细观察你会发现每个样本的表格信息就保存在table标签中,10个table标签对应10个样本。

每个表格中的每一行又对应着table标签中的tr标签,一行中的每个数据就在tr标签中的td标签下。

2)提取信息

获取所有的table标签节点信息。

tables = soup.find_all('table') print(len(tables)) # 查看标签数量

本例中存在11个table标签,其中第一个并不是我们所需要的,因此后续提取将略过第一个table标签。

for循环获取每个table标签中的样本名称及其表格数据。

for tab in tables[1:]: # 从第2个table标签开始迭代循环,第一个标签为table[0] # 提取样本名称,样本名称在a标签中 sample = tab.find_all('a')[0].get_text() # 获取a标签文本信息 sample_name = sample.split(' ')[1][:-2] # 从文本中截取名称 # 提取表格信息 trs = tab.find_all('tr') # 获取table中的所有tr标签 for tr in trs[2:]: # trs[0:1]不包含所需信息,因此略过 miRNA_family = tr.find_all('td')[0].get_text() count = tr.find_all('td')[1].get_text()

现在,我们获取了所有表格的每一行数据,下一步就是保存数据。

3、数据保存

这里,我将每个样本都保存为一个csv文件。

import pandas as pd content = [[miRNA_family, count]] list_name = ['miRNA', 'count'] data = pd.DataFrame(columns=list_name, data=content) data.to_csv("C:\\Users***\\{}.csv".format(sample_name), mode='a', header=False, encoding='utf-8') 4、完整代码 from bs4 import BeautifulSoup import urllib.request import pandas as pd url = 'file:///D:/***.html' html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, "html.parser") tables = soup.find_all('table') for tab in tables[1:]: # 提取样本名称 sample = tab.find_all('a')[0].get_text() sample_name = sample.split(' ')[1][:-2] # 提取表格信息 trs = tab.find_all('tr') for tr in trs[2:]: miRNA_family = tr.find_all('td')[0].get_text() count = tr.find_all('td')[1].get_text() # 存储信息 content = [[miRNA_family, count]] list_name = ['miRNA', 'count'] data = pd.DataFrame(columns=list_name, data=content) data.to_csv("C:\\Users\\***\\{}.csv".format(sample_name), mode='a', header=False, encoding='utf-8') 5、重要模块/函数 1)urlopen函数

需要导入urllib.request模块,用于打开html文件,后加read()实现文件的读取。

2)BeautifulSoup模块

BeautifulSoup函数将文本字符串信息解析成html格式,即将原始的食材做出一桌的“佳肴”。find_all函数可以帮你找到你所需要的菜所在的盘子,继续find_all便可从盘子中挑出你想吃的菜,最后再用筷子get_text()夹起放入碗中。

3)pandas模块

Pandas模块是Python用于数据导入及整理的模块,对于数据的处理工作十分有用。这里简单介绍csv文件的保存,***.to_csv()函数中,***表示你要保存的数据变量,函数中第一个参数即保存文件的地址及文件名,mode = 'a'表示追加写入,header=False省略列名,有关to_csv的更多信息可以自行了解。

4)split函数与字符串切片

事实上,sample = tab.find_all('a')[0].get_text()语句获取的内容是:(Sample  ck-12h),而我只想要ck-12h。

先用空格分隔成两个片段:sample_1 = sample.split(' ')

返回一个列表值:['(sample', 'ck-12h)']

获取列表的第二个元素:sample_2 = sample_1[1]

返回一个字符串:ck-12h)

获取除“)"外的其他内容:sample_3 = sample_2[:-2]

返回我们想要的内容:ck-12

合在一起写就是:sample_name = sample.split(' ')[1][:-2]

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3