网络爬虫——中国大学排名网
目标网址:
link.http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html
目标数据:
排名+学校名称+省市+总分+生源质量
任务要求:
全球有很多份大学排名,这里以上海交通大学研发的“软科中国最好大学排名2019”为例,,编写“大学排名爬虫”,从网络上获取数据 。拟从该网址爬取该名单上310 所国内大学的排名数据,并将它们打印出来。
基本步骤:
大学排名爬虫的构建需要三个重要步骤:
第一,从网络上获取网页内容;
第二,分析网页内容并提取有用数据到恰当的数据结构中;
第三,利用数据结构展示或进一步处理数据。
由于大学排名是一个典型的二维数据,因此,采用二维列表存储该排名所涉及的表单数据。具体来说,采用requests 库爬取网页内容,使用beautifulsoup4 库分析网页中数据,提取310 个学校的排名及相关数据,存储到二维列表中,最后采用用户偏好的方式打印出来。
源码:
import requests
from bs4 import BeautifulSoup
import bs4
def getHtml(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return “”
def analysis(ulist,html):
soup=BeautifulSoup(html,‘lxml’)
#找到目标标签tbody,并查找子标签遍历
for tr in soup.find(‘tbody’).children:
#将找到的子标签复制给tds数组
if isinstance(tr,bs4.element.Tag):
tds=tr(‘td’)
#将子标签数组的值插入到列表中
ulist.append([tds[0].string,tds[1].string,tds[3].string])
def prin(ulist,num):
tplt="{0:10}\t{1:{3}10}\t{2:^10}"
print(tplt.format(“排名”,“学校名称”,“总分”,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=getHtml(url)
analysis(uinfo,html)
prin(uinfo,20)
main()
结果输出如下: