request和bs4的使用

该文章介绍了一个Python爬虫程序,用于从软科网址获取大学排名信息。程序使用requests库获取网页源代码,然后用BeautifulSoup解析HTML,提取排名、学校名称、地区和总分等关键数据,将这些信息存储在一个二维数组中,并提供了打印输出功能。主要涉及网络爬虫和网页数据处理技术。
摘要由CSDN通过智能技术生成
# 爬虫的爬取的四个阶段
# 分别是:排名、学校名称、地区、总分
# 四个字段都在tr标签下
# 1、排名字段在tr标签中的一个td标签中
# 2、学校名称字段在tr标签下的一个a标签中,并且属性是class=name-cn
# 3、地区字段也在tr标签下的一个td标签中
# 4、总分字段任然在tr标签下的一个td标签中
# 5、每一对tr标签代表一所大学的信息
# 二维结构分析:四个阶段(排名、学校名称、地区、总分)
# 爬虫需要编写的函数如下:
# 1、使用request库去软科网址爬取源代码https://shanghairanking.cn/rankings/bcur/2023
# 2、使用bs4库解析爬取下来的源代码
# 3、构建一个二维结构的数组,这个包含的数组有四列
# 4、填充二维数据
# 导包导库
import requests
import bs4
from bs4 import BeautifulSoup
# 去软科网址爬取源代码
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):
# ulist:爬虫最终提供的列表
# html就是爬虫下来的源代码
    soup=BeautifulSoup(html,"html.parser")
# 提取soup中我们想要的关键信息:排名、学院名称、地区、总分
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):
            # td标签的列表或者数组,记录到tds数组中
            tds=tr('td')
            a=tr('a','name-cn')
            ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[2].text.strip(),tds[4].string.strip()])

# 打印输出数据,并且在输出的时候设置我们的输出格式:排名、学校名称、地区、总分
# 通过分析得出学校名称这个字段给出的空间要比其他三个字段大
# 需要将我们爬取的个数做灵活判断。输出可以是10,20,30,学校的排名
# 定义输出格式函数
def printUnivList(ulist, num):
    #创建格式数据
    tplt = "{0:^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
    # 打印输出标头:排名、学校名称、地区、总分
    print(tplt.format("排名", "学校名称", "地区", "总分", chr(12288)))
    # 打印输出表单:四个字段对应的数据
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2], u[3], chr(12288)))


# 定义主函数
def main():
    # 预定一个空列表
    uinfo=[]
    # 给出爬虫的url地址
    url="http://www.shanghairanking.cn/rankings/bcur/2023"
    # 调用刚才定义的三个函数完成爬虫
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,30)

if __name__ == "__main__":
    main()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值