本期分享用Python爬取已故院士名单并导入Excel中。这是2023年暑期实习期间boss安排的任务,需要将已故院士名单----中国科学院学部与院士的名单导入到Excel中,并且一个名字仅存在一个单元格里。由于直接导出的话,所有的名字会在一个单元格里,而且每个人的名字长度不同,用Excel处理十分麻烦,所以我决定直接将名字爬出来,并导入到Excel中。
首先,导入所需的包
import requests
import re
其次,发送请求得到响应,并解码。
#定义要爬取的url
url = "http://casad.cas.cn/ysxx2022/ygys/"
#定义请求头
headers = {
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.43",
"Cookie":"Secure; Hm_lvt_141d1d902a441a529f2409bd8abe53ef=1688811037; Secure; Hm_lpvt_141d1d902a441a529f2409bd8abe53ef=1688819535",
}
#发送请求得到响应
response = requests.get(url,headers = headers)
#解码相应content:html字符串
content = response.content.decode('utf8','ignore')
接着,使用正则表达式提取数据
#使用正则表达式提取数据
contents = re.findall('<div\sclass="rmbs_a">(.*?)</div>', content, re.DOTALL)
str = contents[0]
str1 = str.split( )
#提取带有名字的字符串
names = []
for i in range(2,len(str1),3):
names.append(str1[i])
names的内容如图所示:
然后,匹配中文名字
yuanshi_names = []
for i in range(len(names)):
yuanshi_names.append(re.findall('target="_blank">(.*?)</a>',names[i],re.DOTALL))
yuanshi_names的内容如图所示:
最后,写入excel表
#写入excel表
import xlwt
f = xlwt.Workbook('encoding = utf-8') #设置工作簿编码
sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True) #创建sheet工作表
for i in range(len(yuanshi_names)):
sheet1.write(i,0,yuanshi_names[i]) #写入数据参数对应 行, 列, 值
f.save('已故院士名单.xlsx')#保存.xls到当前工作目录
如图所示:
心得体会:虽然数据分析师重在分析,不必精于爬虫,但是如果会一点爬虫的知识,说不定哪天就用到了,多学点东西总是没错的。
好啦,本期就分享到这里!