中国大学排名定向爬虫
中国大学排名定向爬虫
功能描述
输入:大学排名URL链接
输出:大学排名信息的屏幕输出(排名,大学名称,总分)
技术路线:requests—bs4
定向爬虫:仅对输入URL进行爬取,不扩展爬取
程序的结构设计
步骤1:从网络上获取大学排名网页内容
getHTMLText()
步骤2:提取网页内容中信息到合适的数据结构
fillUnivList()
步骤3:利用数据结构展示并输出结果
printUnivList()
import requests
from bs4 import BeautifulSoup
import bs4
'''输入是需要获取的url信息,输出是url的内容
def getHTMLText(url):
return ""
将url信息从网络中爬取下来,并将它其中的html页面返回给其他的程序
'''
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return ""
'''将一个HTML页面放到一个list列表中,列表定义为ulist
def fillUnivList(ulist,html):
pass
提取html中关键的数据 并且填到一个列表中
'''
def fillUnivList(ulist,html):
soup=BeautifulSoup(html,"html.parser")
# print(soup.prettify())
#查找tbody中的tr标签并将它的孩子进行遍历
for tr in soup.find('tbody').children:
#过滤非标签类型的其他信息
#用isinstance函数对类型做判断
if isinstance(tr,bs4.element.Tag):
tds=tr('td')
ulist.append([tds[0].string,tds[1].a.string,tds[4].string])
'''将ulist信息打印出来'''
def printUnivList(ulist,num):
# 打印表头
print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
for i in range(num):
u=ulist[i]
# 打印其他信息
# 所有信息保存在ulist中 ,想输出的学校由number来控制
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
#主函数
def main():
#信息放在uinfo中
uinfo=[]
url='https://www.shanghairanking.cn/rankings/bcur/2022'
html=getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20) #打印20条信息
main()
中文输出对齐
import requests
from bs4 import BeautifulSoup
import bs4
'''输入是需要获取的url信息,输出是url的内容
def getHTMLText(url):
return ""
将url信息从网络中爬取下来,并将它其中的html页面返回给其他的程序
'''
def getHTMLText(url):
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return ""
'''将一个HTML页面放到一个list列表中,列表定义为ulist
def fillUnivList(ulist,html):
pass
提取html中关键的数据 并且填到一个列表中
'''
def fillUnivList(ulist,html):
soup=BeautifulSoup(html,"html.parser")
# print(soup.prettify())
#查找tbody中的tr标签并将它的孩子进行遍历
for tr in soup.find('tbody').children:
#过滤非标签类型的其他信息
#用isinstance函数对类型做判断
if isinstance(tr,bs4.element.Tag):
tds=tr('td')
ulist.append([tds[0].string,tds[1].a.string,tds[2].text])
'''将ulist信息打印出来'''
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]
# 打印其他信息
# 所有信息保存在ulist中 ,想输出的学校由number来控制
print(tplt.format(u[0].strip(),u[1].strip(),u[2].strip(),chr(12288)))
#主函数
def main():
#信息放在uinfo中
uinfo=[]
url='https://www.shanghairanking.cn/rankings/bcur/2022'
html=getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20)
#打印20条信息
main()
bs4 string与text的区别
在指定标签td,没有子标签,且有文本时,两者的返回结果一致,都是文本
在指定标签td,没有子标签,且没有文本时,.string返回None,.text返回为空
在指定标签td,只有一个子标签时,且文本只出现在子标签之间时,两者返回结果一致,都返回子标签内的文本
最关键的区别,在指定标签td,有子标签,并且父标签td和子标签p各自包含一段文本时,两者的返回结果,存在很大的差异
.string返回为空,因为文本数>=2,string不知道获取哪一个
.text返回的是,两段文本的拼接。
https://www.cnblogs.com/kaibindirver/p/11374669.html

浙公网安备 33010602011771号