BeautifulSoup学习 之结构

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

  1. Tag
  2. NavigableString
  3. BeautifulSoup
  4. Comment

()1)、Tag

  就是html中的标签,如图所示

代码:

html
‘<title>The Dormouse\‘s story</title> <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>‘
>>> soup=BeautifulSoup(html,"html.parser")
>>> soup.title
<title>The Dormouse‘s story</title>
>>> soup.name
‘[document]‘
>>> soup.head
>>> soup.a
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
>>> type(soup.title)
<class ‘bs4.element.Tag‘>
>>> type(soup.a)
<class ‘bs4.element.Tag‘>
>>> soup.a.name
‘a‘
>>> soup.a.attrs
{‘href‘: ‘http://example.com/elsie‘, ‘id‘: ‘link1‘, ‘class‘: [‘sister‘]}
>>> soup.a.attrs[‘class‘]
[‘sister‘]
>>> soup.a.text
‘Elsie‘

(2)NavigableString

要想获取标签内部的文字怎么办呢

很简单,用 .string 即可,例如

>>> soup.a.string
‘Elsie‘
>>>type(soup.a)
<class ‘bs4.element.Tag‘>
>>> type(soup.a.name)
<class ‘str‘>
>>> type(soup.a.text)
<class ‘str‘>
>>> type(soup.a.string)
<class ‘bs4.element.NavigableString‘>

可以看出来,soup.a.sting获取到的是一个NavigableString类型

(3)BeautifulSoup

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

>>> soup.name
‘[document]‘
>>> type(soup)
<class ‘bs4.BeautifulSoup‘>

(4)Comment

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

>>> html="""<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>"""
>>> soup=BeautifulSoup(html,"html.parser")
>>> soup.a
<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
>>> soup.a.string
‘ Elsie ‘
>>> soup.a.text
‘‘
时间: 2024-08-04 16:11:57

BeautifulSoup学习 之结构的相关文章

[Go语言]从Docker源码学习Go——结构和函数的定义

Docker在最近很火,而作为Docker的开发语言-Go也再次被大家提到. 已经使用Docker一段时间了,但是对于源码,尤其是其开发语言Go却一直是一知半解. 最近准备利用空余时间从Docker源代码入手来学习一下Go,同时对Docker的实现也希望可以提高一个层次. 有兴趣的可以一起讨论,学习. 准备工作: 1. Docker源代码https://github.com/docker/docker (版本1.1.2) 2. 安装开发工具LiteIDE, 这个是官方的Go语言的IDE 3. G

angularjs 学习笔记 -----结构定义

1.  Module使用方法 var APP =angular.module('fontApp',['ngResource', 'ngRoute', 'ngSanitize']); APP为定义的别名,之后的调用都应尽量使用该别名 'fontApp' ng-app="fontApp" 新版本angular中route被分离出来,各个被使用的Providerdou需要在此处声明. 大型应用应该拆分模块来做,先定义一个服务模块,然后再加载它 angular.module('xmpl.ser

android学习-应用结构-AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <!-- package:用来标识这个应用的,就像人的身份证号 android:versionCode:系统内部的版本号,用户看不见这个 android:versionName:用户可以看见的版本号 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android"

Maven学习-目录结构

Maven学习-入门 1. 什么是Maven 2. 如何用Maven来构建项目 3. Maven项目的目录结构 Maven约定了一套规则来创建和构建项目.得益于Maven的一些约定,我们只要学习相对很少的命令就可以创建和管理我们的项目.在项目的目录结构上,Maven有一套约定的通用的目录结构. 使用一套通用的目录结构的好处是,可以减少开发人员熟悉不同Maven项目时的认知负担.在使用相同的目录结构的情况下,开发人员可以很快的熟悉一个项目. 1.Maven通用的目录结构介绍 通用目录结构 Mave

SQL索引学习-索引结构

前一阵无意中和同事讨论过一个SQL相关的题(通过一个小问题来学习SQL关联查询),很惭愧一个非常简单的问题由于种种原因居然没有回答正确,数据库知识方面我算不上技术好,谈起SQL知识的学习我得益于2008年进的一家公司,有几个DBA技术相当专业,正好手上有一个项目遇到了一些数据库查询性能问题,就试着想办法优化,于是自己将相法和DBA沟通后,居然得到了他们的赞同,让我信心大增,后来一段时间我又主动找他们聊了一些其它的知识,所以在数据库索引这块我算是相对一般的.net程序员要更加有见解一些.当时我们部

c语言学习笔记 - 结构体

前面在学习枚举类型enum时就觉得有些不习惯,那里习惯理解了的话,到结构体这里的理解就更方便些了,因为两者有一些相似的地方. //用结构体登记一个学生的姓名和分数,如果小于60分,显示bad #include <stdio.h> typedef struct{                 char name[20]; float points; char *appraise;  //这里用字符型指针,如果用普通字符串,外面无法赋值} students; //定义一种结构体,typeof 数

python2.7 beautifulsoup学习使用

学习使用python的beautiful soup库,大大方便了网络爬虫对于HTML文件的解析,beautiful soup将HTML拆解成对象处理,将HTML转换成字典和数组,相比利用正则表达式解析的爬虫,省略了学习正则表达式的高成本 说人话就是正则表达式太难了,博主学不会! 本篇只介绍Beautiful Soup的使用,不涉及安装.配置. Beautiful Soup的使用方法如下: 1.创建Beautiful Soup对象 首先导入bs4库,创建Beautiful Soup对象 ? 1 2

USB第1-4章学习——USB结构体系概述

第一章  术语与缩写 一些术语与缩写,没有太多用处 第二章 绪论 无太多用处 第三章 背景 介绍了USB的一些硬件指标 使用场所等 可泛读了解 第四章 结构体系概述 (极其重要 是理解整个USB工作原理的基础,学习者都必须对这一章有深刻的理解才能学习好后面的内容) 4.1 USB系统描述 USB互连:分层星形拓扑结构 最大限制七层(复合设备算两层) USB设备 和USB主机(一个系统只能有一个) 4.2 物理结构 USB的物理特性 做电路可能会用到 但是对程序用处不大 4.3 电源 可以进行功耗

python:BeautifulSoup学习

上一篇说到用BeautifulSoup解析源代码,下面我们就来实战一下: 1 from bs4 import BeautifulSoup 2 html = urllib.request.urlopen('http://www.massey.ac.nz/massey/learning/programme-course/programme.cfm?prog_id=93536') 3 html = html.read().decode('utf-8') 4 soup = BeautifulSoup(h