中国最好大学排名定向爬虫

学习视频:

视频链接
欢迎留言指出错误。
在这里插入图片描述

方法与思路:

应用模块:

requests:发送请求,获取响应
beautifulsoup4:从 HTML 或 XML 文件中提取数据的 Python 库.

在这里插入图片描述

数据提取方式:

采用beautifulsoup库提取信息。

网页分析:

链接:中国最好大学排名2019

在这里插入图片描述

代码如下:

在这里插入图片描述

# encoding: utf-8
# time: 2020/3/22 16:44
# 说明:

from bs4 import BeautifulSoup
import bs4
import requests

#输入是获取URL信息,输出是URL内容
def gethtmltxt(url):
    # 检测是否异常
    try:
        # get函数获取URL信息,并设定timeout时间为30秒
        r = requests.get(url, timeout=30)
        # print(r.status_code)可查询状态码,返回200
        # 如果发送了一个错误请求(一个4XX客户端错误,或者5XX服务器错误响应),
        # 我们可以通过Response.raise_for_status()来抛出异常
        r.raise_for_status()
        #print(r.encoding)可查看网页的编码方式,此网站为ISO-8859-1,
        # r.apparent_encoding从内容中分析出的响应内容编码方式
        r.encoding = r.apparent_encoding
        # r.text:http响应内容的字符串形式,即url的页面内容
        # 将网页的信息内容返回给其他部分
        return (r.text)
    # 如果异常则返回一个空字符
    except:
        return ""

#将HTML页面放到一个空列表中,列表名称定义为ulist
def culi(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    # 用for语句查找HTML中的tbody标签,并将它的孩子children做一个遍历,变量中每一个tr对应一所大学信息
    for tr in soup.find("tbody").children:
        # 检测tr标签的类型,如果不是bs4库定义的Tag类型将过滤掉
        if isinstance(tr, bs4.element.Tag):
            # 将tr标签中的td标签存为一个列表类型tds,tr('td')相当于tr.find_all("td")
            tds = tr("td")
            # 在ulist中增加所需字段,分别对应大学排名,大学名称,大学地域
            ulist.append([tds[0].string, tds[1].string, tds[2].string])

#将ulist中的信息打印出来,num表示需要将列表中多少个选项或元素打印出来
def printhanshu(ulist, num):
    # 设置表头宽度
    a = "{0:^10}{1:{3}^10}{2:^10}"
    # 实现对表头的打印,{}表示槽,10表示取十位间隔,^表示居中,chr((12288)表示中文空格
    print(a.format("排名", "学校", "地域", chr(12288)))
    for i in range(num):
        # 将第i个学校的信息作为一个简短的变量u来代替
        u = ulist[i]
        # 打印出每一所学校的信息
        print(a.format(u[0], u[1], u[2], chr(12288)))

#主函数
def main():
    # 将大学信息放到一个列表中,列表名叫unifo
    unifo = []
    # 给出大学排名的url链接
    url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html"
    # 将URL转换成HTML
    html = gethtmltxt(url)
    # 将HTML的信息提取后放在unifo变量中
    culi(unifo, html)
    # 打印20所学校信息
    printhanshu(unifo, 20)


main()

运行效果:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值