python读取本地html文件表格数据保存为csv格式 |
您所在的位置:网站首页 › 如何提取网页中的表格文件 › python读取本地html文件表格数据保存为csv格式 |
废话不多说,直接入正题,以下是我将要爬取的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)打开html文件,右击选择审查元素,点击左上角箭头图标,将光标移到表格内容上。 仔细观察你会发现每个样本的表格信息就保存在table标签中,10个table标签对应10个样本。 每个表格中的每一行又对应着table标签中的tr标签,一行中的每个数据就在tr标签中的td标签下。 获取所有的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 |