爬取中文大学排名网址:http://m.gaosan.com/gaokao/26...request获取htmlbeautifulsoup解析网页re正则表达式匹配内容创建并保存excel1234-*-coding=utf-8-*-@时间:2020/6/1812:25@作者:eahay@文件:大学排名1.py@软件:PyCharmfrombs4importBeautifulSoup#网页分析获取数据importre#文本匹配的正则表达式importurllib.request,urllib.error#制定url获取网页数据importxlwtdefmain():baseurl="http://m.gaosan.com/gaokao/265440.html"#1抓取网页datalist=getData(baseurl)savepath="中国大学排名.xls"saveData(datalist,savepath)#正则表达式paiming=re.compile(r'(.*).*.*.*.*')#创建一个超链接正则表达式对象,代表一个字符串模式,rulexuexiao=re.compile(r'.*(.*).*.*.*')defen=re.compile(r'.*.*(.*).*.*')xingji=re.compile(r'.*.*.*(.*).*')cengci=re.compile(r'.*.*.*.*(.*)')#抓取网页defgetData(baseurl):datalist=[]html=askURL(baseurl)#保存获取的网页源代码#print(html)[一个一个]解析数据(一个网页解析一次)Axitraderrebatehttp://www.fx61.com/brokerlis...soup=BeautifulSoup(html,"html.parser")#soup是解析出来的树结构对象foriteminsoup.find_all('tr'):#查找符合要求的字符串组成列表#print(item)#测试查看itemalldata=[]#保存一个学校的所有信息item=str(item)排名paiming1=re.findall(paiming,item)#重新正则表达式搜索指定字符串0表示只要第一个在front后标是要查找的范围#print(paiming1)if(notpaiming1):passelse:print(paiming1[0])data.append(paiming1)if(paiming1indata):schoolnamexuexiao1=re.findall(xuexiao,item)[0]#print(xuexiao1)data.append(xuexiao1)scoredefen1=re.findall(defen,item)[0]#print(defen1)data.append(defen1)星级xingji1=re.findall(xingji,item)[0]#print(xingji1)data.append(xingji1)levelcengci1=re.findall(cengci,item)[0]#print(cengci1)data.append(cengci1)#print('-'*80)datalist.append(data)#将一个处理后的学校信息放入datalist中returndatalist#获取指定url页面的信息内容defaskURL(url):#我初次访问用户agenthead={#模拟浏览器头部信息,用于伪装发送消息的“User-Agent”到豆瓣服务器:"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.116Safari/537.36"}#Useragent的意思是告诉豆瓣服务器,我们是什么机器?浏览器的本质是告诉浏览器是什么级别的文件我们可以接受的内容request=urllib.request.Request(url,headers=head)#携带header信息访问url#使用request对象访问html=""try:response=urllib.request.urlopen(request)#使用urlopen传递封装的request对象html=response.read().decode("utf-8")#read可以解码防止乱码#print(html)excepturllib.error.URLErrorase:ifhasattr(e,"code"):print(e.code)#打印错误代码ifhasattr(e,"reason"):print(e.reason)#printCauseoferrorreturnhtml#3保存数据defsaveData(datalist,savepath):book=xlwt.Workbook(encoding="utf-8",style_compression=0)#创建workbook对象样式压缩效果sheet=book.add_sheet('ChineseUniversityRank',cell_overwrite_ok=True)#创建一个表格单元格覆盖foriinrange(0,640)的工作表:print("Article%d"%(i+1))data=datalist[i]#print(data)forjinrange(0,5):#保存每一行数据sheet.write(i,j,data[j])#databook.save(savepath)#保存数据表mainfunctionif__name__=="__main__":#程序执行时##调用函数程序执行入口main()#init_db("movietest.db")print("抓取完成!")
