一、需求解析李鑫:python爬虫+xlwings包excel自动化爬取全国医院信息(A+医学百科)+描述性统计zhuanlan.zhihu.com
在这篇文章里,分省,分类别爬取了全国的医院信息。现在我们需要做加字段合并操作。
出现两个问题:医院等级这个字段需要我们加上去。
两百多张表需要做成一张表。
二、思路逻辑
读取文件夹里的文件列表 ——> 读取EXCEL表格 ——> 获取每张表格行数 ——> 插入等级 ——> 合并时值保留第一张表的表头此为目录
三、代码详解
读取文件列表
for jibie in yiyuan_jibie:
path_name = r'C:/Users/alex/Desktop/医院信息爬虫数据/分等级/' + jibie + '/'
list_jibie = os.listdir(path_name)
#插入医院等级这个字段
import xlwings as xw
for jibie in yiyuan_jibie:
for xl in list_jibie:
xlpath = r'C:/Users/alex/Desktop/医院信息爬虫数据/分等级/' + jibie + '/' + xl
wb = xw.Book(xlpath)
sht = wb.sheets[0]
nrows = sht.api.UsedRange.Rows.count
sht.range(f'I1:I{nrows}').value = jibie
wb.save()
wb.close()
#合并EXCEL表格
import os
import xlrd
import pandas as pd
#获取所有需要合并的工作簿路径,生成list
def file_name(file_dir):
list=[]
for file in os.listdir(file_dir):
if os.path.splitext(file)[1] == '.xls':
list.append(file)
return list
#yiyuan_jibie = ["三级甲等","三级乙等","三级丙等","二级甲等","二级乙等","二级丙等","一级甲等","一级乙等","一级丙等"]
for jibie in yiyuan_jibie:
path = r'C:/Users/alex/Desktop/医院信息爬虫数据/分等级/' + jibie
wks = file_name(path)
#print(wks)
data = [] #定义一个空list
for i in range(len(wks)):
read_xlsx = xlrd.open_workbook(path + '\\' + wks[i])
sheet1 = read_xlsx.sheets()[0] #查看sheet1的数据
nrow = sheet1.nrows
title = sheet1.row_values(0) #查看第1行数据
for j in range(1,nrow): #逐行打印
data.append(sheet1.row_values(j))
content= pd.DataFrame(data)
#修改标题
content.columns= title
#写入文件
#写入csv文件
#content.to_csv(path+'\\py_union.xlsx', sep=',', header=True, index=False)
#写入excel文件
content.to_excel(path+'\\' + jibie + '.xlsx', header=True, index=False)
四、结语
一张有全国医院信息的表格就完成了。如果想要数据的留下邮箱就好。后面会有一些简单的分析。
码字不易,求赞求关注!谢谢!