使用requests和beautifulsoup这两个库爬取中国大学排名。
requests和beautifulsoup这两个库是爬虫最基本的库,对于一些基本的网页都可以使用这两个库进行爬取,使用起来也很方便。
Requests
这个库最多的使用就是get方法,其他的几个方法基本上不不怎么用,如果有一定的网页基础的话,直接背过get方法即可,不需要过多的了解。
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() #根据服务器返回的状态码来判断是否请求成功,若成功就返回函数运行结果,若失败跳到except那行,执行except下面的语句
r.encoding = r.apparent_encoding #防止乱码
return r.text #返回服务器给出响应的文本信息
except: #若try里面的内容执行成功,这行代码就会被跳过
return ""
Beautifulsoup
这个库就是对requests爬取下来的网页源码进行解析的,当我们拿到一整个网页之后,我们需要的信息往往是有规律的,不管是tr、tb或者是存在于相同的class中,Beautifulsoup都可以利用循环来进行获取,并且保存下来。
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag): #如果对象(object)的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[3].string]) # 第二个是位置
格式下输出爬取的内容
def printUnivList(ulist, num):
tplt ="{0:^10}\t{1:{3}^10}\t{2:^10}" # {3}表示学校名称填充时使用format第三个下标对应的填充方式
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.cn/zuihaodaxuepaiming2018.html"
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20)
main()
全部的代码如下:
import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() #根据服务器返回的状态码来判断是否请求成功,若成功就返回函数运行结果,若失败跳到except那行,执行except下面的语句
r.encoding = r.apparent_encoding #防止乱码
return r.text #返回服务器给出响应的文本信息
except: #若try里面的内容执行成功,这行代码就会被跳过
return ""
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag): #如果对象(object)的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[3].string]) # 第二个是位置
def printUnivList(ulist, num):
tplt ="{0:^10}\t{1:{3}^10}\t{2:^10}" # {3}表示学校名称填充时使用format第三个下标对应的填充方式
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.cn/zuihaodaxuepaiming2018.html"
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20)
main()
最后获取的内容