爬虫数据-Beautiful Soup

Beautiful Soup的简介

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据,官方解释如下:

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

GitHub地址:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

和lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要功能也是如何解析和提取HTML/XML数据。

lxml只会局部遍历,而BeautifulSoup是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会很大,所以性能要低于lxml

BeautifulSoup用来解析HTML比较简单,支持CSS选择器,Python标准库中的HTML解析器,也支持lxml的XML解析器。

BeautifulSoup安装  pip install bs4

解析工具对比


BeautifulSoup的基本使用


解析器


搜索文档树

Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find() 和 find_all() .其它方法的参数和用法类似,

from bs4 import BeautifulSoup

html_doc = """

<table class="tablelist" cellspacing="0" cellpadding="0">

    <tbody>

        <tr class="h">

            <td class="1" width="374">职位名称</td>

            <td>职位类别</td>

            <td>人数</td>

            <td>地点</td>

            <td>发布时间</td>

        </tr>

        <tr class="even">

            <td class="l"><a href="https://www.baidu.com">区块链高级研发工程师</a></td>

            <td class="l">技术类</td>

            <td class="l">1</td>

            <td class="l">深圳</td>

            <td class="l">2018-11-25</td>

        </tr>

        <tr>

            <td><a href="https://www.qq.com">金融云高级后台开发</a></td>

            <td>技术类</td>

            <td>2</td>

            <td>深圳</td>

            <td>2018-11-24</td>

        </tr>

        <tr>

            <td><a href="https://www.juran.com">高级研发工程师</a></td>

            <td>技术类</td>

            <td>2</td>

            <td>深圳</td>

            <td>2018-11-24</td>

        </tr>

        <tr>

            <td><a href="https://www.python.com">高级图像算法工程师</a></td>

            <td>技术类</td>

            <td>2</td>

            <td>深圳</td>

            <td>2018-11-24</td>

        </tr>

        <tr>

            <td><a href="https://www.lg.com" id="test" class="test">高级业务运维工程师</a></td>

            <td>技术类</td>

            <td>2</td>

            <td>深圳</td>

            <td>2018-11-24</td>

        </tr>

    </tbody>

</table>

"""

soup = BeautifulSoup(html_doc, 'lxml')

# 1.获取所有tr标签

# 2.获取第2个tr标签

# 3.获取所有class等于even的tr标签

# 4.将所有id等于test,class也等于test的a标签提取出来

# 5.获取所有的a标签的href属性

# 6.获取所有的职位信息(纯文本)

CSS常用选择器介绍

通过标签名查找

print(soup.select('a'))

通过类名查找

print(soup.select('.sister')) 查找class=sister的标签

通过id查找

print(soup.select("#link1"))

组合查找

组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开:

print(soup.select("p #link1"))

直接子标签查找,则使用 > 分隔:

print(soup.select("head > title"))

通过属性查找

print(soup.select('a[href="http://example.com/elsie"]'))

获取内容

以上的 select 方法返回的结果都是列表形式,可以遍历形式输出,然后用 get_text() 方法来获取它的内容

BeautifulSoup4四大对象种类

BeautifulSoup4将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

Tag

NavigableString

BeautifulSoup

Comment

遍历文档树

contents和children

contents返回所有子节点的列表

children返回所有子节点的迭代器

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容