简介

  • Beautiful Soup 对象 我全部使用soup表示;
  • Beautiful Soup 简介:

    简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。

1、创建Beautiful Soup 对象

1.1 soup.prettify()

from bs4 import BeautifulSoup
html_content = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
#使用html5lib 解释器解释html_conten的内容
soup = BeautifulSoup(html_content,"html5lib") # 格式化输出html
print(soup.prettify())

该方法是将html进行格式化,输出的内容就是格式化后的html代码。

1.2 soup.标签名

# 输出第一个 title 标签
print(soup.title)
#<title>The Dormouse's story</title>
# 输出第一个 p 标签
print(soup.p)
# <p class="title" name="dromouse"><b>The Dormouse's story</b></p>

1.3 soup.标签名.name

# 输出第一个 title 标签的标签名称
print(soup.title.name)
# title # 输出第一个 p 标签的标签名称
print(soup.p.name)
# p

1.4 soup.标签名.string

# 输出第一个 title 标签的包含内容
print(soup.title.string)
# The Dormouse's story # 输出第一个 p 标签的包含内容
print(soup.p.string)
# The Dormouse's story

1.5 soup.标签名.parent.name

# 输出第一个 title 标签的父标签的标签名称
print(soup.title.parent.name)
# head # 输出第一个 title 标签的父标签的标签名称
print(soup.p.parent.name)
# body

1.6 soup.标签名['属性名']

# 输出第一个 p 标签的 class 属性内容
print(soup.p['class'])
# ['title']
# 输出第一个 a 标签的 href 属性内容
print(soup.a['href'])
# http://example.com/elsie

1.7 修改、删除、添加soup的属性

#操作方法与字典一样
# 修改第一个 a 标签的href属性为 http://www.baidu.com/
soup.a['href'] = 'http://www.baidu.com/' # 给第一个 a 标签添加 name 属性
soup.a['name'] = u'百度' # 删除第一个 a 标签的 class 属性为
del soup.a['class'] print(soup.a)
#<a href="http://www.baidu.com/" id="link1" name="百度"><!-- Elsie --></a>

1.8 soup.标签名.contents

##输出第一个 p 标签的所有子节点
print(soup.p.contents)
#[<b>The Dormouse's story</b>]

1.9 soup.find()

# 输出第一个 id 属性等于  link3 的  a 标签
print(soup.find(id="link3"))
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
# 输出第一个 a 标签
print(soup.find('a'))
# <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
#查找ID位link2的a标签的文本
find_a = soup.find('a',id='link2')
print(find_a)
# The Dormouse's story

1.10 soup.find_all()

  • 得到是一个序列,我们可以是用遍历的方式对其进行输出,可以得到它的相关属性以及文本的值;
# 输出所有的 a 标签,以列表形式显示
# print(soup.find_all('a'))
#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>] # 查找所有的a标签
find_all_a = soup.find_all('a')
print("查找所有的a标签")
for a_tag in find_all_a:
print(a_tag.getText())
print(a_tag.get('href')) print soup.find_all("a", class_="sister") # 通过属性进行查找
print soup.find_all("a", attrs={"class": "sister"}) # 通过文本进行查找
print soup.find_all(text="Elsie")
print soup.find_all(text=["Tillie", "Elsie", "Lacie"]) # 限制结果个数
print soup.find_all("a", limit=2)

1.11 get_text()

#获取所有文字内容
print(soup.get_text())
'''
The Dormouse's story The Dormouse's story
Once upon a time there were three little sisters; and their names were
,
Lacie and
Tillie;
and they lived at the bottom of a well.
...
'''
#获取第一个p标签的内容
print(soup.p.get_text())
# The Dormouse's story

1.12 soup.标签名.attrs

# 输出第一个  a 标签的所有属性信息
print(soup.a.attrs)
# {'href': 'http://example.com/elsie', 'class': ['sister'], 'id': 'link1'}

1.13 正则匹配

# 正则匹配,名字中带有b的标签
for tag in soup.find_all(re.compile(r"b")):
print(tag.name)
"""
body
b
"""

2、四大内置对象

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

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

Tag

  • Tag 是什么?通俗点讲就是 HTML 中的一个个标签;
  • 两个重要的属性,是 nameattrs

name

print(soup.name)
# soup 对象本身比较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称。
print(soup.a.name)
# a

attrs

print(soup.p.attrs)
#{'class': ['title'], 'name': 'dromouse'}
#在这里,我们把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。 #如果要获取到某个属性的值,我们可以这样:
print(soup.p['name'])
# dromouse
print(soup.p.get('name'))
# dromouse

删除、修改属性

soup.p['class']="newClass"
print (soup.p )
#<p class="newClass" name="dromouse"><b>The Dormouse's story</b></p> del soup.p['class']
print soup.p
#<p name="dromouse"><b>The Dormouse's story</b></p>

contents[n] 获取第n个节点的内容

head = soup.find('head')
#head = soup.head
#head = soup.contents[0].contents[0]
print head html = soup.contents[0] # <html> ... </html>
head = html.contents[0] # <head> ... </head>
body = html.contents[1] # <body> ... </body>

2.2 NavigableString

string

  • 获取到标签里面的内容
# 获取到第一个p 标签的内容
print(soup.p.string)

2.3 BeautifulSoup

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

print type(soup.name)
#<type 'unicode'>
print soup.name
# [document]
print (soup.attrs )
#{} 空字典

2.4 Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。

我们找一个带注释的标签

print (soup.a )
#<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
print soup.a.string
#Elsie
print type(soup.a.string)
#<class 'bs4.element.Comment'>

本文参考:[python BeautifulSoup库用法总结

](https://www.cnblogs.com/scios/p/8652760.html)

【Python】Beautiful Soup的更多相关文章

  1. 【python】Beautiful Soup的使用

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  2. 【转载】Beautiful Soup库(bs4)入门

    转载自:Beautiful Soup库(bs4)入门 该库能够解析HTML和XML 使用Beautiful Soup库:      from bs4 import BeautifulSoup impo ...

  3. 【爬虫】beautiful soup笔记(待填坑)

    Beautiful Soup是一个第三方的网页解析的模块.其遵循的接口为Document Tree,将网页解析成为一个树形结构. 其使用步骤如下: 1.创建对象:根据网页的文档字符串 2.搜索节点:名 ...

  4. 【python】列出http://www.cnblogs.com/xiandedanteng中所有博文的标题

    代码: # 列出http://www.cnblogs.com/xiandedanteng中所有博文的标题 from bs4 import BeautifulSoup import requests u ...

  5. 【Python②】python之首秀

       第一个python程序 再次说明:后面所有代码均为Python 3.3.2版本(运行环境:Windows7)编写. 安装配置好python后,我们先来写第一个python程序.打开IDLE (P ...

  6. 【python】多进程锁multiprocess.Lock

    [python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报  分类: Python(38)  同步的方法基本与多线程相同. ...

  7. 【python】SQLAlchemy

    来源:廖雪峰 对比:[python]在python中调用mysql 注意连接数据库方式和数据操作方式! 今天发现了个处理数据库的好东西:SQLAlchemy 一般python处理mysql之类的数据库 ...

  8. 【python】getopt使用

    来源:http://blog.chinaunix.net/uid-21566578-id-438233.html 注意对比:[python]argparse模块 作者:limodou版权所有limod ...

  9. 【Python】如何安装easy_install?

    [Python]如何安装easy_install? http://jingyan.baidu.com/article/b907e627e78fe146e7891c25.html easy_instal ...

  10. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

随机推荐

  1. day30:TCP&UDP:socket

    目录 1.TCP协议和UDP协议 2.什么是socket? 3.socket正文 1.TCP基本语法 2.TCP循环发消息 3.UDP基本语法 4.UDP循环发消息 4.黏包 5.解决黏包问题 1.解 ...

  2. 面向接口编程实践之aspnetcoreapi的抽象

    最为一名越过菜鸟之后的开发,需要做接口开发.下面做一个纯粹的接口编程的实例demo,仅仅是一个webapi接口的抽象. 下面是代码接口,AbsEFWork是webapi,BaseEntityFrame ...

  3. fzy&czn生日赛t1 CZN

    fzy&czn生日赛t1 CZN 膜拜hybb首杀 目录 fzy&czn生日赛t1 CZN 题目背景 题目描述 分析 my code wnag's code 题目 题目背景 有一天,c ...

  4. #Powerbi 利用动态格式字符串功能,实现百分数智能缩位(powerbi4月重磅更新功能)

    以下内容(基于POWERBI 23年4月更新的最新版本) 实际业务中,日常报表一般都有一个较为规范的百分数缩位要求,如果统一要求保留一位小数,那么在有些时候,我们会面临被缩成0.0%的尴尬,例如原有的 ...

  5. 音视频八股文(11)-- ffmpeg 音频重采样

    1重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率.sample format.声道数等参数,使之按照我们期望的参数输出. 1.2 为什么要重采样 为什么要重采样?当然是原有的⾳频参数 ...

  6. 2020-12-12:现场写代码,把CPU打满,java和go都行,并解释为什么。

    福哥答案2020-12-12: 现在的电脑一般是多核的,单个for循环cpu是不会打满的. 我的电脑是四核八线程的,不管是java还是go,6个for循环就能把cpu打满,4个和5个cpu打不满. 为 ...

  7. 2022-04-08:在一张 无向 图上,节点编号0~N-1。老鼠开始在1节点,猫在2节点,0号节点是洞,老鼠想进洞, 老鼠第先出发,猫后出发,轮流行动。 在每个玩家的行动中,他们 必须 沿着图中与所

    2022-04-08:在一张 无向 图上,节点编号0~N-1.老鼠开始在1节点,猫在2节点,0号节点是洞,老鼠想进洞, 老鼠第先出发,猫后出发,轮流行动. 在每个玩家的行动中,他们 必须 沿着图中与所 ...

  8. Javascript 常见的循环方式总结

    本文地址: https://www.cnblogs.com/zichliang/p/17412968.html 在Javascript中有很多种循环方式.有多种循环方式可以用来遍历数组.对象.以及执行 ...

  9. APP中RN页面渲染流程-ReactNative源码分析

    在APP启动后,RN框架开始启动.等RN框架启动后,就开始进行RN页面渲染了. RN页面原生侧页面渲染的主要逻辑实现是在RCTUIManager和RCTShadowView完成的. 通过看UIMana ...

  10. ODOO13 之十 :Odoo 13开发之后台视图 – 设计用户界面

    Odoo 13开发之后台视图 – 设计用户界面 本文将学习如何为用户创建图形化界面来与图书应用交互.我们将了解不同视图类型和小组件(widgets)之间的差别,以及如何使用它们来提供更优的用户体验. ...