zoukankan      html  css  js  c++  java
  • Python的BeautifulSoup中的HTML结构解析

    BS把HTML看做一个树形,以标签和文本为基本类型,一个标签包含其他标签,被解析为一个标签是另一个标签的子树。那么,最终整个HTML文档被解析为一棵树的形式。

    BS包括四种基本类型: Soup(树),Tag(标签节点),String(字符节点),Comment(注释节点)

    这四种类型的节点构成树,Soup代表这颗树,String为叶子节点,tag为标签子节点,为其标签包含的所有内容。

    剖析 HTML

    使用 BeautifulSoup 类剖析HTML文档。 BeautifulSoup会得出以下一些信息:

    • 有些标签可以内嵌 (<BLOCKQUOTE>) ,有些不行 (<P>).
    • table和list标签有一个自然的内嵌顺序。例如,<TD> 标签内为 <TR> 标签,而不会相反。
    • <SCRIPT> 标签的内容不会被剖析为HTML。
    • <META> 标签可以知道文档的编码类型。

    剖析树

    到目前为止,我们只是载入文档,然后再输出它。 现在看看更让我们感兴趣的剖析树: Beautiful Soup剖析一个文档后生成的数据结构。

    剖析对象 (BeautifulSoup或 BeautifulStoneSoup的实例)是深层嵌套(deeply-nested), 精心构思的(well-connected)的数据结构,可以与XML和HTML结构相互协调。 剖析对象包括2个其他类型的对象,Tag对象, 用于操纵像<TITLE> ,<B>这样的标签;NavigableString对象, 用于操纵字符串,如"Page title"和"This is paragraph"。

    建树

    import bs4#导入BeautifulSoup库

    Soup = BeautifulSoup(html)#其中html 可以是字符串,也可以是句柄

    需要注意的是,BeautifulSoup会自动检测传入文件的编码格式,然后转化为Unicode格式

    节点属性

    可以通过Tag.attrs访问,返回字典结构的属性。

    或者Tag.name这样访问特定属性值,如果是多值属性则以列表形式返回。

    遍历

    子节点:

    Tag.Tag_child1:直接通过下标名称访问子节点。

    Tag.contents:以列表形式返回所有子节点。

    Tag.children:生成器,可用于循环访问:for child in Tag.children

    String 子节点:

    Tag.String:Tag只有一个String子节点是,可以这么访问,否则返回None

    Tag.Strings:生成器,可用于循环访问:for str in Tag.Strings

    子孙节点:

    Tag.descendants:生成器,可用于循环访问:for des inTag.descendants

    父节点:

    Tag.parent:父节点

    Tag.parents:父到根的所有节点

    兄弟节点:

    Tag.next_sibling

    Tag.next_siblings

    Tag.previous_sibling

    Tag.previous_siblings

    查找

    最常用的是find_all()函数

    方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件。

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

    第一个参数为Tag的名称

    #第一个参数为Tag的名称,如:

    tag.find_all(‘title’)

    #得到”<title>&%^&*</title>”,结果为一个列表

    第二个参数为匹配的属性

    tag.find_all(“title”,class=”sister”)

    #得到如”<title class = “sister”>%^*&</title>

    第二个参数也可以为字符串,得到字符串匹配的结果

    tag.find_all(“title”,”sister”)

    #得到如”<title class = “sister”>%^*&</title>

     参考文档

    https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

  • 相关阅读:
    k8s 集群文件共享
    .net core 使用IOptionsXXX读取配置
    docker Dockerfile
    k8s 部署tomcatservice (NodePort通过节点向外提供服务)
    k8s 用Rinetd对外tomcatservice
    k8s 部署应用
    坑爹的matlab除法
    Cygwin/Git与Git Source Control Provider结合时初始目录
    手机电话号码从excel导入的最简单方法
    快捷方式改变电源计划,设置关闭显示器时间
  • 原文地址:https://www.cnblogs.com/haixianglan/p/13942911.html
Copyright © 2011-2022 走看看