Python 爬虫十六式 - 第五式:BeautifulSoup-美味的汤

BeautifulSoup 美味的汤

学习一时爽,一直学习一直爽!

   Hello,大家好,我是Connor,一个从无到有的技术小白。上一次我们说到了 Xpath 的使用方法。Xpath 我觉得还是比较绕该怎么办呢???有没有更加简单易懂的方法呢?答案是肯定的,当然有更加简单易懂的方法了,那就是 BeautifulSoup 美味的汤。这个方法对于正则和 Xpath 来说更加的简单方便,更加易懂,能够节省我们大量的分析时间。

1.BeautifulSoup 的简介

  BeautifulSoup是一个HTML数据提取库。几乎没有什么数据可以难住BeautifulSoup。只要是你可以获取的到的数据,那么你都可以通过BeautifulSoup简单快捷的进行数据提取。是一款非常适合新手入门使用的数据提取库。当然,作为一个HTML数据提取库,requests 都有了官方中文文档,那么 BeautifulSoup 当然也不能少啊,你可以访问 BeautifulSoup 的官方中文文档:点我走起 >>>


2.BeautifulSoup 的安装

  既然我又来说到安装了,那就证明这个库和我们平常想的库不太一样,它具体的安装方法为:

pip install beautifulsoup4

  注意,是beautifulsoup4,并不是beautifulsoup,虽然我们beautifulsoup的叫,但人家实际叫beautifulsoup4,一定要记清楚哈。


3.BeautifulSoup 的基础使用

  安装完了,下面我们就正式开始使用,老规矩,我们先来一段html文档,然后逐一举例,来看BeautifulSoup如何使用:

  首先我们来随意编写一段html代码:

html = """
<html>
    <head>
        <title>Hello,Wrold</title>
    </head>
    <body>
        <div class="book">
            <span><!--这里是注释的部分--></span>
            <a href="https://www.baidu.com">百度一下,你就知道</a>
            <img src="https://abc.jpg" />
            <p class="abc">这是一个示例</p>
        </div>
    </body>
</html>"""

3.1 简单的使用

  在进行内容提取之前,我们需要将获取的html内容转换成BeautifulSoup对象:

In [1]: from bs4 import BeautifulSoup
    
In [2]: soup = BeautifulSoup(html, "html5lib")
    
In [3]: type(soup)
Out[3]: bs4.BeautifulSoup

  可以看的到,我们生成的对象是一个 bs4.BeautfulSoup 对象,我们所有的内容提取都基于这个对象。切记进行内容提取之前先生成 bs4.BeautifulSoup 对象。

3.2 解析器的使用

  在上面的语句中,大家可以看到我们使用了一个 html5lib 这是一个解析器,在构造BeautifulSoup 对象的时候,需要用到解析器。BeautifulSoup 支持python自带的解析器和少数第三方解析器。详细对比如下:

解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(html,"html.parser") Python的内置标准库。 执行速度适中。 文档容错能力强。 Python 3.2.2前的版本文档容错能力差
lxml HTML 解析器 BeautifulSoup(html, "lxml") 速度快文档容错能力强 需要安装C语言库
lxml XML 解析器 BeautifulSoup(html, ["lxml","xml"]) BeautifulSoup(html, "xml") 速度快 唯一支持XML的解析器 需要安装C语言库
html5lib BeautifulSoup(markup,"html5lib") 最好的容错性 以浏览器的方式解析文档生成HTML5格式的文档 速度慢但不依赖外部扩展

  一般来说,对于速度或性能要求不太高的话,还是建议大家使用 html5lib 来进行解析的,但是当规模达到一定程度的时候,解析速度就会影响到整体项目的快慢了,所以如果你对性能有要求的话,还是推荐使用 lxml 来进行解析的。具体的视情况而定吧。


3.3 节点对象

  BeautifulSoup将复杂的HTML文档转换成了一个树状的结构,每个节点都是一个Python对象,所有的对象都可以归纳为四类:TagNavigableStringBeautifulSoup,Commnet

3.3.1 Tag 对象

  Tag 就是我们平时所说的标签,Tag下拥有许多属性和方法,和前端类似,例如 a 标签一定会有它的href属性,某些属性是某些标签所独有的。下面我们来看一下如何提取一个 Tag 对象:

In [1]: soup = BeautifulSoup(html)

In [2]: tag = soup.p

In [3]: type(tag)
Out[3]: bs4.element.Tag

  可以看的到,我们生成了一个 Tag 对象,我们再来看看 Tag 对象有哪些属性:

  • name属性:

  每一个tag标签都有name属性

In [4]: tag.name
Out[4]: 'p'
  • Attributes

  在html中,某个 Tag 可能有多个属性, Tag 属性使用和字典一样的方法取值:

In [5]: tag["class"]
Out[5]: ['abc']

如果某个 Tag 属性有多个值,那么返回的是一个列表:

In [6]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值