美文网首页
Python3 爬虫入门(三)- Beautiful Soup

Python3 爬虫入门(三)- Beautiful Soup

作者: 小温侯 | 来源:发表于2018-07-21 00:06 被阅读35次

    bs4即Beautiful Soup 4是另一个用来解析HTML或XML文件的Python库,不得不说Beautiful Soup这个名字取的非常合适:“美味的汤” ---- 作为汤类菜,有时候是可有可无的,就像如果没有bs4我们使用css或者xpath选择器也能做到文档解析;但是如果桌上有汤,不管是饭后喝一碗还是用来泡饭吃,都极为增色,就像bs4,它所提供的各种方法让你在解析网页的时候无所不利,将会大大的减少你的时间。

    Rule No.1

    如果你是第一次使用bs4,在写体验代码的时候不要把你的测试文件命名为bs4.py,这会引起一些问题。会引起什么问题?在导入BeautifulSoup的时候,from bs4 import BeautifulSoupPython会优先从你这个文件里导入。

    我的笔记

    bs4的官方中文文档是:Beautiful Soup 4.2.0 文档, 其英文文档是4.4版本的。我把4.2的中文文档看了一遍,以下是我的笔记。

    解析器

    HTML解析器是Python的官方解释器,同时还有一个很推荐的第三方解析器叫lxml。解析器就是用来解析HTML文档的,在你指定解析那个网页内容时,你同样需要指定一个解析器,这样网页就会被解析成某种格式供你之后进行操作。你可以使用如下代码来查看文档被解析成了什么样子:

    from bs4.diagnose import diagnose
    data = open("bad.html").read()
    diagnose(data)
    

    几种解析器的比较(我:需要C语言库尽然也可以是劣势):

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

    一个树形结构

    这个其实就是官方文档目录的一个简化版,其实我想说的都在官方文档里写的很详细了,作为一篇介绍bs4的文档我实在不知道在写些什么了。聊以凑数吧。

    • 对象
      • tag (可以对文档进行修改)
      • attributes
      • 可以用unicode()转换成Python字符串,一者便于操作,二者节省内存
      • 特殊字符串,如注释
    • 遍历文档树
      • 子节点
        • tag的名字,find(), find_all()方法
        • .content和.children,这两项和find系列方法有异曲同工之妙。
        • .descendants
        • .string, .strings和.stripped_strings
      • 父节点
        • .parent和.parents
      • 兄弟节点
        • .next_sibling 和.previous_sibling
        • .next_siblings 和.previous_siblings
      • 回退和前进
        • .next_element和.previous_element
        • .next_elements和.previous_elements
        • 回退前进和兄弟节点几个方法的输出有时候是一样的
    • 搜索文档树
      • 过滤器
        • 字符串过滤
        • 正则表达式
        • 列表
        • True
        • 方法
      • find_all()
        • find_all( name , attrs , recursive , text , **kwargs )
        • name参数和keyword参数
        • 按CSS搜索,使用关键词class_
        • text参数
        • limit参数
        • recursive参数
      • find系列方法
        • find_all(), find()其中后者返回前者的第一项,其余用法一样
        • find_parents() 和 find_parent()
        • find_next_siblings() 和find_next_sibling()
        • find_previous_siblings() 和 find_previous_sibling()
        • find_all_next() 和 find_next()
        • find_all_previous() 和 find_previous()
      • CSS选择器
        • soup.select("body a")
        • 直接子标签
        • 兄弟节点标签
        • CSS类名
        • 通过id查判断是否存在某个属性
        • 通过属性的值
        • 通过语言设置
      • 修改文档树
        • tag
        • 修改.string
        • append()
        • new_string() 和 .new_tag()
        • insert()
        • insert_before() 和 insert_after()
        • clear()
        • extract()
        • decompose()
        • replace_with()
        • wrap()
        • unwrap()
    • 输出
      • 格式化输出
      • 压缩输出
      • get_text()
    • 解析部分文档:SoupStrainer

    相关文章

      网友评论

          本文标题:Python3 爬虫入门(三)- Beautiful Soup

          本文链接:https://www.haomeiwen.com/subject/uqycmftx.html