BeautifulSoup使用总结

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

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。

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

BS的参数:

    “html.parser 优势:python的内置标准库,执行速度适中,文档容错能力强。

    “lxml  优势:速度快,文档容错能力强   劣势:需要安装C语言库

    “lxml-xml  优势:速度快,唯一支持xml的解析器

    “html5lib   优势:最好的容错性,以浏览器的方式解析文档,生成html5格式的文档,但其速度较慢,且不依赖外部拓展

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

  1. Tag

  2. NavigableString

  3. BeautifulSoup

  4. Comment

1. Tag

Tag通俗点讲就是HTML中的一个个标签,它有两个重要的属性,是 name 和 attrs:例如:

s = BeautifulSoup(html,"html.parser")

# [document] #bs 对象本身比较特殊,它的 name 即为 [document]

print(bs.name)

# head #对于其他内部标签,输出的值便为标签本身的名称

print(bs.head.name)

# 在这里,我们把 a 标签的所有属性打印输出了出来,得到的类型是一个字典。

print(bs.a.attrs)

#还可以利用get方法,传入属性的名称,二者是等价的

print(bs.a['class']) # 等价 bs.a.get('class')

# 可以对这些属性和内容等等进行修改

bs.a['class'] = "newClass"

print(bs.a)

# 还可以对这个属性进行删除

del bs.a['class']

print(bs.a)

2.  NavigableString

既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可   bs.title.string

3. BeautifulSoup

BeautifulSoup对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性,例如:

bs = BeautifulSoup(html,"html.parser")

print(type(bs.name))

print(bs.name)

print(bs.attrs)

4. Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号。

 

BeautifulSoup的查找方法:

find_all(name,attrs,recursive,text,kwargs)

Name参数:会查找与字符串完全匹配的内容,正则表达式过滤:如果传入的是正则表达式,那么BeautifulSoup4会通过search()来匹配内容。如果传入一个列表,BeautifulSoup4将会与列表中的任一元素匹配到的节点返回。传入一个方法,根据方法来匹配。

kwargs参数:find_all(href=re.compile("http://news.baidu.com"))

attrs参数:我们可以使用attrs参数,定义一个字典来搜索包含特殊属性的tag:

text参数:通过text参数可以搜索文档中的字符串内容,与name参数的可选值一样,text参数接受 字符串,正则表达式,列表。

 

当然CSS选择器也是可以用于查找的

bs = BeautifulSoup(html,"html.parser")

bs.select('title')

 



            
            

本博客源码Github地址:

https://github.com/zeus-y/

请随手给个star,谢谢!

打赏

评论