Beautiful Soup库学习-中国大学MOOC-Python网络爬虫与信息提取-北京理工大学嵩天教授


前言

本博客会先介绍Beautiful Soup库的基础知识,再讲解1个相关实战项目。非常基础,具体视频以及课件,在中国大学MOOC里可以找到,由北京理工大学,嵩天教授主讲:Python网络爬虫与信息提取


一、Beautifou Soup相关知识

主要介绍Beautifou Soup的基本使用以及bs4库的基本元素
Beautiful Soup库入门

1:Beautiful Soup库的下载

下载Beautiful Soup库

2:Beautiful Soup库的使用

安装小测
可以看到通过Beautiful Soup库解析出来得到的,不再是像requests库那样的一个html页面,而是一个个的标签。即如下图所示:建立html页面和标签之间的对应关系
对Beautiful Soup库的理解

3:BeautifulSoup类的基本元素

BeautifulSoup类的基本元素
使用方法举例,如图是demo页面:
demo页面
BeautifulSoup基本元素举例输出,如下图:
举例输出

4:BeautifulSoup的几个常用方法

几个方法
还有个**find_all()**方法
在这里插入图片描述
这个方法经常用到,大家多留心,如图是使用举例:
find_all方法举例

二、中国大学排名定向爬虫项目实战

1.网页介绍与预期想要的结果

中国大学排名链接

在这里插入图片描述
输入url链接后,输出如下图:
结果展示

2.爬虫可行性分析

标签如下图:我们先找到tbody标签,再找到其子标签tr,接着找tr标签的子标签,也就是td标签,直接获取每个td标签里的值。
分析标签

3.程序分析

程序分析

4.代码展示

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 = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].text, tds[1].text, tds[4].text])


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]
        print(tplt.format(u[0].strip(), u[1].strip(), u[2].strip(),chr(12288)))


def main():
    unifo = []
    url = "https://www.shanghairanking.cn/rankings/bcur/2020"
    html = getHTMLText(url)
    fillUnivList(unifo, html)
    printUnivList(unifo, 20)
main()

5.代码几个点需要注意的地方:

tag.text的用法是:获取标签下所有文字的内容
在这里插入图片描述
tag.contents的用法:将其子节点以列表形式输出,因此ulist.append可以改为:

 #ulist.append([tds[0].text, tds[1].text, tds[4].text])之前的代码
  ulist.append([tds[0].contents[0], tds[1].contents[0].text, tds[4].contents[0]])

在这里插入图片描述
关于tag.string的说明:这就是为什么不用tds[0].string:
即标签中既有bs4.element.NavigableString也有bs4.element.Comment,会导致回报None。
在这里插入图片描述

总结

多看官方文档(比直接找博客来的快且准确):文档链接请点击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值