利用python网络爬虫获取软科中国最好大学排名2019数据
生活随笔
收集整理的這篇文章主要介紹了
利用python网络爬虫获取软科中国最好大学排名2019数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?本例程來源于中國大學(xué)慕課中北京理工大學(xué)嵩天老師所開設(shè)的《Python網(wǎng)絡(luò)爬蟲與信息提取》 (https://www.icourse163.org/course/BIT-1001870001),例程的主要任務(wù)是,利用Requests庫和Beautiful Soup庫從軟科中國最好大學(xué)排名網(wǎng)站(http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html)中爬取數(shù)據(jù)并打印,原網(wǎng)頁截圖如下。
現(xiàn)在要爬取并打印前圖中表格的前三列信息,由于Requests庫和Beautiful Soup庫只能對html頁面中的靜態(tài)文本進(jìn)行爬取,因此要檢查該頁面的源代碼如下,確認(rèn)表格中的信息為靜態(tài)文本,另外還需要檢查一下該網(wǎng)站是否有robots.txt文件,經(jīng)檢查確認(rèn)沒有。
?例程的代碼如下:
#程序的結(jié)構(gòu)設(shè)計(jì) #步驟1:從網(wǎng)絡(luò)上獲取大學(xué)排名網(wǎng)頁內(nèi)容 # getHTMLText() #步驟2:提取網(wǎng)頁內(nèi)容中信息到合適的數(shù)據(jù)結(jié)構(gòu) # fillUnivList() #步驟3:利用數(shù)據(jù)結(jié)構(gòu)展示并輸出結(jié)果 # printUnivList()import requests from bs4 import BeautifulSoup import bs4#從目標(biāo)url中提取文本信息的函數(shù) def getHTMLText(url):try:r=requests.get(url,timeout=30)#設(shè)置連接成功提醒r.raise_for_status()#改變編碼方式r.encoding=r.apparent_encodingreturn r.textexcept:return ""#在所有文本中提取表格前三列的信息 def fillUnivList(ulist,html):#html.parser解釋器可以將提取出的文本按標(biāo)簽進(jìn)行分行,保證可讀性soup=BeautifulSoup(html,"html.parser")#從源代碼可以觀察到,表格信息都是嵌套在tbody中,而每一行的信息由是嵌套在每一個(gè)tr標(biāo)簽中,每一行的每一格信息嵌套在td中,這也是html語言的特點(diǎn)。#因此要遍歷tbody中的每一個(gè)tr標(biāo)簽,即遍歷每一行。for tr in soup.find('tbody').children:#為了防止文本字符中含有“tr"字段的信息被誤認(rèn)為html標(biāo)簽,因此需要進(jìn)行標(biāo)簽確認(rèn)if isinstance(tr,bs4.element.Tag):tds=tr('td')#提取出每一行表格前3列的信息ulist.append([tds[0].string,tds[1].string,tds[2].string])#打印提取出的表格信息 def printUnivList(ulist,num):#對輸出結(jié)果進(jìn)行format格式化輸出,其中"{1:{3}^10}"中的{3}表示的是空余位置用format函數(shù)的第四個(gè)參數(shù)填充#因?yàn)槿绻前凑漳J(rèn)的話,format中空余位置會用英文字符進(jìn)行填充,這就造成了長短不一,輸出不美觀的影響#而chr(12288)是中文空格對應(yīng)的Unicode編碼,這樣就可以用中文空格填充空余位置了。tplt="{0:^10}\t{1:{3}^10}\t{2:^10}"print(tplt.format("排名","學(xué)校","分?jǐn)?shù)",chr(12288)))for i in range(num):u=ulist[i]print(tplt.format(u[0],u[1],u[2],chr(12288)))def main():uinfo = []url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"html=getHTMLText(url)fillUnivList(uinfo,html)#20代表爬取前20個(gè)學(xué)校printUnivList(uinfo,60)main()?
總結(jié)
以上是生活随笔為你收集整理的利用python网络爬虫获取软科中国最好大学排名2019数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于CarSim和Simulink的车辆
- 下一篇: 【python科研绘图】封装接口直接利用