python3个人爬虫之:BeautifulSoup学习心得

一 Beautiful Soup的介绍

    官网介绍:Beautiful Soup是一个可以从HTML或者XML文件中提取数据的Python库,能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup 会帮你节省数小时甚至数天的工作时间。

    简而言之:就是一种强大的解析工具,帮助我们从网页中提取数据时提高效率。

  【tips】: BeautifulSoup自动将输入文档转换为Unicode编码, 输出文档转换为utf-8编码。

二 安装

    推荐使用pip来安装:

    pip install beautifulsoup4

    验证是否安装成功(在解释器导入模块不报错即安装成功):

  【tips】: 这里虽然安装的是beautifulsoup4这个包,但是在引用的时候是引入bs4,因为这个包源代码本身的库文件夹名称就是  bs4 。

    python3个人爬虫之:BeautifulSoup学习心得

三 Beautiful Soup 的解析器比较

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

四 基本使用

    1.  demo演示

python3个人爬虫之:BeautifulSoup学习心得

    2. BeautifulSoup类的几种基本元素

基本元素 说明
Tag 标签,最基本的信息组织单元
Name 标签的名字, <p>...</p>的名字是“p”,  使用格式: <tag>.name
Attributes 标签的属性, 字典形式组织,使用格式: <tag>.attrs
NavigableString 标签内非属性字符串, <>...</>中字符串,使用格式:<tag>.string
Comment 标签内字符串的注释部分,一种特殊的Comment类型

    3. 标签选择

        3.1 选择元素

        python3个人爬虫之:BeautifulSoup学习心得

        3.2 获取子节点和子孙节点

        python3个人爬虫之:BeautifulSoup学习心得

        3.3 获取父节点和祖先节点

        要获取某个节点元素的父节点,可以调用parent属性

        想要获取所有的祖先节点,可以调用parents属性

        3.4 获取兄弟节点

        要获取某个节点元素的兄弟节点,可以调用next_sibling 和 previous_sibling属性 --> 分别返回所有前面和后面的兄弟节点的生成器。

    4 标准选择器

    BeautifulSoup提供了一些查询的方法如find_all(), find()等方法,可以调用方法传入相应的参数灵活查询。

    find_all(name, attrs, recursive, string, **kwargs) --> 返回一个list

   python3个人爬虫之:BeautifulSoup学习心得

        find(name, attrs, recursive, string, **kwargs) --> 返回的是单个元素

    5 CSS选择器

        使用CSS选择器,只需要调用select()方法,传入相应的CSS选择器即可,css用法可以查看W3school CSS选择器参考手册

    python3个人爬虫之:BeautifulSoup学习心得

        6 获取属性和文本

            获取属性:<tag>["属性名称"] 或者 <tag>.attrs["属性名称"]

            获取文本: <tag>.string 或者 <tag>.get_text() 或者 <tag>.textpython3个人爬虫之:BeautifulSoup学习心得

五 总结

    1. 推荐使用lxml解析库, 必要时使用html.parser

    2. 标签选择刷选功能弱但是速度快, 提取数据时可考虑提取单个的标签

    3. 建议使用find(), find_all() 查询匹配单个结果或者多个结果

    4. 如果对CSS选择器熟悉的话可以使用select()选择法

    5. 记住常用提取属性和文本内容的方法(提取数据主要用的方法)