程序描述:
输入: url链接 权威发布|2021软科中国大学专业排名||就业前景|就业率
输出: 排名信息的屏幕输出
技术路线:requests-bs4定向爬虫
如果信息没有写在代码中,则不能被用来定向,所以我们要检查以下源代码里面是不是有这些信息
首先获取排名网页内容,getHTMLText()
提取信息到合适的数据结构,fillUnivList()
利用数据结构展示和输出,printUnivList()
首先它的格式
A+
学校条件
B+
学科支撑
A+
专业生源
A+
专业就业
A
专业条件
所有大学的信息都在 单个大学的信息封装在 其中,排名信息在 大学信息在 我们最后要打印的效果类似这样 最终确定我们要筛选的为: Tag = 'div', attrs = 'ranking' Tag = 'a', attrs = 'name-cn' Tag = 'div', attrs = 'score' 给出提取的代码 最后所有的代码如下def fillUnivList(ulist,html): # 将提取的html信息放在列表ulist中
soup = BeautifulSoup(html, 'html.parser')
# print(soup.find('div',attrs = 'body-container').prettify())
# 这个print用于检查格式,确定层级
for div in soup.find_all('div',attrs = 'univ-item'):
# 从每个'univitem'中,提取NaviagbleString,并转换为合适的格式
ranking = int(div.find('div',attrs = 'ranking').string)
name = div.find('a',attrs = 'name-cn').string
score = float(div.find('div',attrs = 'score').string)
ulist.append([ranking,name,score])
import requests
from bs4 import BeautifulSoup
def getHTMLText(url): # 获取URL信息,返回html内容
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "HTMLError"
def fillUnivList(ulist,html): # 将提取的html信息放在列表ulist中
soup = BeautifulSoup(html, 'html.parser')
print(soup.find('div',attrs = 'body-container').prettify())
for div in soup.find_all('div',attrs = 'univ-item'):
ranking = int(div.find('div',attrs = 'ranking').string)
name = div.find('a',attrs = 'name-cn').string
score = float(div.find('div',attrs = 'score').string)
ulist.append([ranking,name,score])
def printUnivList(ulist,num): # 将ulist打印
templete_string = "{0:^10}\t{1:{3}<12}\t{2:^10}\t"
# 中文字符utf-8编码空格为 chr(12288)
print(templete_string.format('排名','大学','总分',chr(12288)))
for i in range(num):
univ = ulist[i]
print(templete_string.format(univ[0],univ[1],univ[2], chr(12288)))
print("Suc")
def main():
uinfo = []
url = 'https://www.shanghairanking.cn/rankings/bcmr/2021/080901'
html = getHTMLText(url)
fillUnivList(uinfo, html)
# print(uinfo)
printUnivList(uinfo, 10) # only 10 univ
main()