python爬虫案例典型:爬取大学排名(亲测有效)
前言:之前在课本上和csdn看到了这个爬取大学排名的案例,但是不知道是上面原因一直报错,后来终于在借鉴多方的代码后,实现了这个程序的编写。import requestsfrom bs4 import BeautifulSoupimport bs4def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status(
·
前言:
之前在课本上和csdn看到了这个爬取大学排名的案例,但照着案例打出的程序一直报错,后来一步一步根据网上资料分析程序后,不断改错后,终于实现了这个程序的编写。
一、程序展示
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 = bs4.BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
#检测tag类型,过滤非tag类型标签
if isinstance(tr, bs4.element.Tag):
tds = tr('td')
ulist.append([str(tr('td')[0].contents[0]).strip(), tds[1].a.string, str(tr('td')[4].contents[0]).strip()])
return ulist
def printUnivList(ulist, num):
#tplt = "{0:^10}\t{1:{3}^6}\t{2:^10}"
print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
# print(tplt.format("排名","学校名称","总分",chr=(12288)))
for i in range(num):
u=ulist[i]
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
# print(tplt.format(u[0],u[1],u[2],chr=(12288)))
def main():
ulist = []
url = 'https://www.shanghairanking.cn/rankings/bcur/2020'
html = getHTMLText(url)
ulist = fillUnivLIst(ulist, html)
printUnivList(ulist, 20)
main()
二、运行结果展示
PS F:\pyptc> & 'D:\python\python.exe' 'c:\Users\Lenovo\.vscode\extensions\ms-python.python-2021.9.1246542782\pythonFiles\lib\python\debugpy\launcher' '55760' '--' 'f:\pyptc\chongxin.py'
排名 学校名称 总分
<div class="ranking top1" data-v-68e330ae="">
1
</div> 清华大学 852.5
<div class="ranking top2" data-v-68e330ae="">
2
</div> 北京大学 746.7
<div class="ranking top3" data-v-68e330ae="">
3
</div> 浙江大学 649.2
<div class="ranking" data-v-68e330ae="">
4
</div> 上海交通大学 625.9
<div class="ranking" data-v-68e330ae="">
5
</div> 南京大学 566.1
<div class="ranking" data-v-68e330ae="">
6
</div> 复旦大学 556.7
<div class="ranking" data-v-68e330ae="">
7
</div> 中国科学技术大学 526.4
<div class="ranking" data-v-68e330ae="">
8
</div> 华中科技大学 497.7
<div class="ranking" data-v-68e330ae="">
9
</div> 武汉大学 488.0
<div class="ranking" data-v-68e330ae="">
10
</div> 中山大学 457.2
<div class="ranking" data-v-68e330ae="">
11
</div> 西安交通大学 452.5
<div class="ranking" data-v-68e330ae="">
12
</div> 哈尔滨工业大学 450.2
<div class="ranking" data-v-68e330ae="">
13
</div> 北京航空航天大学 445.1
<div class="ranking" data-v-68e330ae="">
14
</div> 北京师范大学 440.9
<div class="ranking" data-v-68e330ae="">
15
</div> 同济大学 439.0
<div class="ranking" data-v-68e330ae="">
16
</div> 四川大学 435.7
<div class="ranking" data-v-68e330ae="">
17
</div> 东南大学 432.7
<div class="ranking" data-v-68e330ae="">
18
</div> 中国人民大学 409.7
<div class="ranking" data-v-68e330ae="">
19
</div> 南开大学 402.1
<div class="ranking" data-v-68e330ae="">
20
</div> 北京理工大学 395.6
三、程序实现需要的几个函数库
requests和 bs4
其中requests库用来爬取网页内容,使用beautifulsoup4库分析网页中的数据,提取学校排名并且打印出来。
首先这两个库是要提前下载的:
需要我们使用cmd进入到我们python下载所在的文件中的Scripts文件中,输入下列指令下载即可
pip install requests
pip install beautifulsoup4
四、程序分析
简单分析一下这个程序,其实相对简单,主要由以下这几个主要的函数组成,
1.def getHTMLText(url):
(1).try.....except语句
这里用到了try except语句,其实这个语句的实现和if else差不多,一般使用其实现异常处理机制从而控制用户输入的常用方法。
try:
<语句>
except <name>:
<语句> #如果在try部份引发了名为'name'的异常,则执行这段代码
else:
<语句> #如果没有异常发生,则执行这段代码
(2)res = requests.get(url,headers=headers)
向网站发起请求,并获取响应对象
参数:
- url :需要抓取的URL地址
- headers : 请求头
- timeout : 超时时间,超过时间会抛出异常
响应对象(res)属性
- encoding :响应字符编码 res.encoding = 'utf-8'
- text :字符串 网站源码
- content :字节流 字符串网站源码
- status_code :HTTP响应码
- url :实际数据的URL地址
更多推荐
已为社区贡献1条内容
所有评论(0)