功能描述:
输入:大学排名URL链接
输出:大学排名信息的屏幕输出
技术路线:requests + bs4
先确定可能性,就是确定我们要提取的信息是否写在了HTML页面中,如果是动态的信息是没法定向爬取的
还要看这个网站的robots协议
具体步骤:
步骤1:从网络上获取大学排名网页内容 getHTMLText()
步骤2:提取网页内容中信息到合适的数据结构 fillUnivList()
步骤3:利用数据结构展示并输出结果 printUnivList()
import requests
from bs4 import BeautifulSoup
import bs4;
# 从网络上获取大学排名网页内容
def getHtmlText(url):
try:
r = requests.get(url, timeout = 30);
r.raise_for_status();
r.encoding = r.apparent_encoding;#修改编码方式
return r.text;
except:
return "";
# 提取网页内容中信息到合适的数据结构
def fillUniversityList(ulist, html):
soup = BeautifulSoup(html, "html.parser");
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
tds = tr('td');
ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string]);
# 利用数据结构展示并输出结果
def printUniversityList(ulist, num):
# {}:表示用第几项填充
tplt = "{0:<5}\t{1:{4}^10}\t{2:{4}^10}\t{3:^5}";
print(tplt.format("排名", "学校名称", "地址", "总分", chr(12288)));
for i in range(num):
list = ulist[i];
print(tplt.format(list[0], list[1], list[2], list[3], chr(12288)));
def main():
# 获取网页源代码信息
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html";
html = getHtmlText(url);
# 通过查看网页源代码,发现大学的排名在一个table表格里面,每一个大学为一行tr
ulist = [];
fillUniversityList(ulist, html);
# 格式化输出大学排名
printUniversityList(ulist, 20);
main()
这里的中文对齐不是很规范,所以这样我们可以有进阶版(中文输出居中对齐)
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
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}"
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/zuihaodaxuepaiming2016.html'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20) # 20 univs
main()