Python 爬虫-2020年中国大学排名
要爬取的网站:2020软科中国大学排名
代码思路均来自:北京理工大学-Python网络爬虫与信息提取(mooc)对爬虫感兴趣的可以去看一下。
爬虫的第一步首先要检查所爬取的网站是否有爬虫协议(robots协议),爬取人家的东西,还是要看看人家网站上那些东西是不能爬的。
检查2020软科中国大学排名的爬虫协议得到结果如下:
从结果中可以知道2020软科中国大学排名是没有爬虫协议的,可以爬取想要的内容。但是无论一个网站是否有爬虫协议,不该爬的东西一定不要爬,这是一个君子协议。
以下是全部代码:
import requests
from bs4 import BeautifulSoup
import bs4
#程序内容:中国大学排名
#编写时间:2020.9.13
#作者:mxx
#获取网页内容
def getText(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
except:
print('爬取失败!')
return r.text
#将获取得网页筛选想要的内容,并添加到一个列表中
def needList (ulist,html):
try:
soup = BeautifulSoup(html,'html.parser')
for tr in soup.find('tbody').children:
#print(type(tr))
if isinstance(tr,bs4.element.Tag):#将不是bs4.element.Tag的内容剔除
tds = tr('td')
ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3].string,tds[4].string])
except :
print('网页解析失败!')
#输出
def printList(ulist,num):
try:
tplt = " {:^15}\t{:^10}\t{:^20}\t{:^15}\t{:^10}"
print(tplt.format("排名",'学校名称','省市','学校类型','总分',chr(12288)))
for i in range(num) :
u = ulist[i]
print(tplt.format(u[0], u[1], u[2], u[3], u[4],chr(12288)))
except :
print('输出发生问题!')
#主函数
def main():
ulist =[]
url ='http://www.zuihaodaxue.com/zuihaodaxuepaiming-zongbang-2020.html'
html = getText(url)
needList(ulist,html)
printList(ulist,10)
main()
最终的结果:
注:
本文只用于交流学习,不作其他用途。