我是靠谱客的博主 秀丽羽毛,最近开发中收集的这篇文章主要介绍BeautifulSoup简介BeautifulSoup简介,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

BeautifulSoup简介

介绍

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

BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的 XML解析器。
使用 pip 安装即可:pip install beautifulsoup4

bs四大对象

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

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment
  1. Tag
    Tag对应 HTML 中的一个个标签
    Tag,它有两个重要的属性,是 name 和 attrs
    name是标签名,attrs是标签的属性
    注意:BeautifulSoup直接调用Tag,只会获得Html中第一个相应的Tag数据

  2. NavigableString
    标签中的内容数据
    使用string属性获取该对象,例如:soup.p.string 获得bs中p标签的内容

  3. BeautifulSoup
    BeautifulSoup 对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,与Tag有相同的 name,attrs属性

  4. Comment
    Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号。
    实际就是如过内容中有注释符号,soup.p.string代码获得变无注释符号,类型为Comment而不是NavigableString。

节点集合

  1. .content属性
    tag 的 .content 属性可以将tag的子节点以列表的方式输出
  2. .children属性
    返回的是 list 生成器对象
  3. .descendants属性
    .contents 和 .children 属性仅包含tag的直接子节点,.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似。如soup.descendants

特殊属性

如果tag只有一个 NavigableString 类型子节点,那么这个tag可以使用 .string 得到子节点。如果一个tag仅有一个子节点,那么这个tag也可以使用 .string 方法,输出结果与当前唯一子节点的 .string 结果相同。

通俗点说就是:如果一个标签里面没有标签了,那么 .string 就会返回标签里面的内容。如果标签里面只有唯一的一个标签了,那么 .string 也会返回最里面的内容。

下面例子解释string属性、多个标签只能获得第一个标签和上述特殊属性
例如:

<html><head><title>The Dormouse's story</title></head>
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>
print(soup.head.string)
后台打印:The Dormouse's story

print(soup.a.string)
后台打印:Elsie

搜索文档树

  1. find_all(name, attrs, recursive, text, **kwargs)
    1、 name 参数
    name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉
    A.传字符串
    最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容
    B.传正则表达式
    如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.
    C.传列表
    如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回
    2、 keyword 参数
    只能使用标签中属性id,不能用name和class属性,使用5属性查找,如:soup.find_all(id=‘link2’)
    3、 text 参数
    通过 text 参数可以搜搜文档中的字符串内容,与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表
  2. select()
    1、通过标签名查找soup.select('title')
    2、通过类名查找soup.select('.sister')
    3、通过 id 名查找soup.select('#link1')
    4、组合查找soup.select('p #link1')
    组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开
    5、属性查找
    查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到
soup.select('a[class="sister"]')
soup.select('a[name="name"]')
soup.select('p a[href="http://example.com/elsie"]')

最后

以上就是秀丽羽毛为你收集整理的BeautifulSoup简介BeautifulSoup简介的全部内容,希望文章能够帮你解决BeautifulSoup简介BeautifulSoup简介所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部