中国大学排名定向爬虫
此处以最好大学网为例!
由于还没有学习正则表达式,故此处我们的需求只需要输出中国大学排名和学校名称即可。
第一步,先进入中国大学网,找到大学排名的url,分析我们所需要的内容在其网页中对应的位置,方便查找。
第二步,写好整个程序的框架,方便后期对内容的填充,待定的可以用pass占位。
第三步,编写代码,调试代码,所需要讲解的都写在代码注释中了,如下。
import requests
from bs4 import BeautifulSoup
# 获取一个页面的内容 并且返回该内容
def getHTMLText(url, headers):
try:
r = requests.get(url, timeout=30)
# 如果不是200 产生异常requests.HTTPError
r.raise_for_status()
# r.encoding是根据header猜测的编码格式 r.apparent_encoding是根据内容得出的编码格式(更为准确)
r.encoding = r.apparent_encoding
return r.text
except:
return ""
# 将一个页面的内容放入到一个列表中
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, 'html.parser')
# 找class属性等于name-cn的a标签 应该使用class_ 而不是class 因为class是关键字 此处注意
for a in soup.find_all('a', class_="name-cn"):
# 测试输出
# print(a.string)
# a.string表示标签中的字符串 将其追加到列表中
ulist.append(a.string)
# 将列表中的信息打印出来
def printUnivList(ulist):
for i in ulist:
# 此处使用格式化字符串 %-6d表示占六位 左对齐 ulist.index(i) + 1表示其在列表中的下标+1 正好表示排名
print("%-6d%s" % (ulist.index(i) + 1, i))
# 主函数
def main():
# 定义一个空列表 将大学信息放在列表中
uinfo = []
url = 'https://www.shanghairanking.cn/rankings/bcur/2021'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
html = getHTMLText(url, headers)
fillUnivList(uinfo, html)
printUnivList(uinfo)
main()
输出结果如下:
1 清华大学
2 北京大学
3 浙江大学
4 上海交通大学
5 南京大学
6 复旦大学
7 中国科学技术大学
8 华中科技大学
9 武汉大学
10 西安交通大学
11 哈尔滨工业大学
12 中山大学
13 北京师范大学
14 四川大学
15 北京航空航天大学
16 同济大学
17 东南大学
18 中国人民大学
19 北京理工大学
20 南开大学
21 山东大学
22 天津大学
23 中南大学
24 吉林大学
25 西北工业大学
26 厦门大学
27 华南理工大学
28 大连理工大学
29 华东师范大学
30 中国农业大学