python爬虫分析大学排名_Python爬虫获得国内高校排名,python,获取,大学排名
整體思路
首先需要找到一個可以看排名的網站,同時他允許我們爬取信息。https://www.shanghairanking.cn/rankings/bcur/2020
然后獲取到網站信息,對信息提取處理后呈現出來。
獲取網站信息需要用到requests庫,處理信息用到bs4庫。
獲取網站信息
requests庫作為python的第三方庫,用以從網頁上獲取信息。使用前需要先下載,輪到pip出場了!
pip install requests
requests庫提供了get方法像服務器請求資源。get方法第一個參數url傳入我們想要獲取信息的網址,params為鏈接中額外的參數。第三個參數為一些控制訪問的參數。
requests.get(url, params=None, **kwargs)
例如,如果您想將key1=value1和傳遞 key2=value2給httpbin.org/get,則可以使用以下代碼:
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
>>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1
這里我們把網址直接傳進去就行。
import requests
url='https://www.shanghairanking.cn/rankings/bcur/2020'
r=requests.get(url,timeout=30)#設置超時時間30s
r.raise_for_status()#返回響應碼不是200就報異常
r.encoding=r.apparent_encoding#設置響應文本編碼為實際編碼
html=r.text #將返回的信息放在變量里
處理獲取到的信息
這里需要用到Beautiful Soup庫,也叫beautifulsoup4 或bs4,使用pip下載bs4庫。
bs4庫提供了html解析器,通過對html標簽樹的遍歷,我們可以得到我們想要的某個標簽下的信息。
標簽樹
html是以<>…>構成所屬關系,形成了標簽的樹形結構。標簽下套著標簽,根據標簽的所屬關系,可以畫出一個樹形的結構。在對樹形結構遍歷時,分為自上而下,自下而上,平行遍歷。我們可以通過bs4庫的屬性獲取到某一個標簽的父類,子類或者兄弟節點來定位我們需要的信息。
分析具體網址
查看學校排名網址的源代碼,找到我們需要的信息的位置。我們要找的就是學校排名,名稱,還有總分。通過觀察可以看到這幾個信息都在tr標簽下,每一個tr就是一行信息。那要找到tr的老板,找到了tbody。tbody只有一個,那找到他下面所有的tr,就找到了我們要的排名信息。
開動吧!
import bs4
ulist=[]
soup=BeautifulSoup(html,'html.parser')
for tr in soup.find('tbody').children:#find所有tbody下面節點
if isinstance(tr, bs4.element.Tag):#如果獲取到的tr是標簽才繼續
tds=tr('td')#把td標簽下信息放到列表tds里
ulist.append([tds[0].string,tds[1].string,tds[4].string])#將我們想打印的信息放在列表ulist里
輸出爬取的信息
先輸出一個表頭,再依次輸出前十名的排序。
print("{:^10}\t{:^10}\t{:^10}".format("排名","學校","總分"))
for i in range(10):
u=ulist[i]
print("{:^10}\t{:^10}\t{:^10}".format(u[0],u[1],u[2]))
成功了嗎?沒有
輸出以后發現只有序號和總分,沒有學校名稱,輸出u查看下獲取到的信息具體是啥。
可以看到學校名稱獲取到的是空,返回查看源代碼,發現在學校名稱的td下面還有a標簽,然后才是名稱。那要回去到名稱就需要找到a標簽,然后獲取a標簽下的字符串就行了。
tds=tr('td')
a=tr.find('a')
ulist.append([tds[0].string,a.string,tds[4].string])
重新出發
這次獲取到了名稱,但是格式不對了。不管怎么調整寬度,這三個字符就是不在一行。那只能看看他的真面目了!
輸出后發現每個獲取到的數據都有空格和換行,那當然不在一行了(攤手)
情況就是這么個情況,只能在獲取時把空格換行這些都去掉。
ulist.append([tds[0].string.strip(' \n'),a.string,tds[4].string.strip('\n ')])
編輯輸出格式,添加中文占位符,輸出前10排名的大學
總結
以上是生活随笔為你收集整理的python爬虫分析大学排名_Python爬虫获得国内高校排名,python,获取,大学排名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑进入pe时蓝屏_电脑密码忘记不要慌!
- 下一篇: python中nltk_python2.