Beautiful Soup 是一个HTML/XML 的解析器,主要用于解析和提取 HTML/XML 数据。 
它基于 HTML DOM 的,会载入整个文档,解析整个 DOM树,因此时间和内存开销都会
大很多,所以性能要低于lxml。 BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python
标准库中的HTML解析器,也支持 lxml 的 XML解析器。虽然说BeautifulSoup4 简单容易比较上手,但是匹配效率还是远远不如正则以及xpath的,一般不推荐使用,推荐正则的使用。

第一步:pip install beautifulsoup4 ,万事开头难,先安装 beautifulsoup4,安装成功后就完成了第一步。

第二步:导入from bs4 import BeautifulSoup 这个模块

第三步:创建 Beautiful Soup 对象          soup = BeautifulSoup(html)

开始使用:

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对
象,所有对象可以归纳为 4种: (1)Tag (2) NavigableString (3) BeautifulSoup (4) Comment

(1)用BeautifulSoup来获取Tags :Tag 通俗点讲就是 HTML 中的一个个标签,直接用BeautifulSoup来调用

soup = BeautifulSoup(html,’lxml’)
print(soup.title)
print(soup.head)
print(soup.a)
print(soup.p)
print(type(soup.p))
这样就可以得到你想要的标签内容了。

tag还可以进行增删改查的操作:

#soup 对象本身比较特殊,它的 name 即为 [document]
print(soup.name)
print(soup.head.name)
#把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。
print(soup.p.attrs)
#根据名称获取对应的属性值,类型为列表
print(soup.p['class'])
print(soup.p.get('class'))
# 可以对这些属性和内容等等进行修改
soup.p['class'] = "newClass"
print(soup.p)
# 删除属性
del soup.p['class']
print(soup.p)
(2)  NavigableString

获取标签内部的文字用 .string 即可

print(soup.p.string)
# The Dormouse's story

print(type(soup.p.string))
# In [13]: <class 'bs4.element.NavigableString'
(3)   BeautifulSoup

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

print(type(soup.name))
# <type 'unicode'>
print(soup.name)
# [document]
print(soup.attrs)
# 文档本身的属性为空 # {}
(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'>
a 标签里的内容实际上是注释,但是如果我们利用 .string 来输出它的内容时,注释符号已经去掉了

一      开始搜索文档树:.find_all(name, attrs, recursive, text, **kwargs)

1)name 参数 
name 参数可以查找所有名字为 name 的 tag,字符串对象会被自动忽略掉 
A.传字符串 
Beautiful Soup会查找与字符串完整匹配的内容 
范例:用于查找文档中所有的<b>标签: 
print(soup.find_all('b')) print(soup.find_all('a')) 
B.传正则表达式 
Beautiful Soup会通过正则表达式的 match()来匹配内容. 
范例:找出所有以 b开头的标签,这表示<body>和<b>标签都应该被找到 
import re for tag in soup.find_all(re.compile("^b")):     print(tag.name) 
C.传列表 
Beautiful Soup会将与列表中任一元素匹配的内容返回. 
范例:找到文档中所有<a>标签和<b>标签: 
print(soup.find_all(["a", "b"])) 
2)keyword 参数 
print(soup.find_all(id='link2')) 
3)text 参数 
text 参数接受字符串,正则表达式,列表, 可以搜搜文档中的字符串内容 
print(soup.find_all(text="Elsie")) 
print(soup.find_all(text=["Tillie", "Elsie", "Lacie"])) 
print(soup.find_all(text=re.compile("Dormouse")))

二 CSS选择器      (重点!!!!!!)

写 CSS时,标签名不加任何修饰,类名前加.,id名前加# 
可以利用类似的 soup.select()方法来筛选元素,返回结果是 list 
soup.select_one() 返回值是list的首个。 
(1)通过标签名查找 
print(soup.select('title'))  print(soup.select('a')) print(soup.select('b')) 
(2)通过类名查找 
print(soup.select('.sister')) 
(3)通过 id 名查找 
print(soup.select('#link1')) 
(4)组合查找 
组合查找即和写 class文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 
p 标签中,id 等于 link1的内容,二者需要用空格分开 
print(soup.select('p #link1')) 直接子标签查找,则使用 > 分隔 
print(soup.select("head > title")) 
(5)属性查找 
查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,
所以中间不能加空格,否则会无法匹配到。 
print(soup.select('a[class="sister"]')) 
print(soup.select('a[href="http://example.com/elsie"]')) 
同样,属性仍然可以与上述查找方式组合,不在同一节点的空格隔开,同一节点的不加
空格 
print(soup.select('p a[href="http://example.com/elsie"]')) 
(6)获取内容 
可以遍历 select 方法返回的结果,然后用 get_text() 方法来获取它的内容。 
soup = BeautifulSoup(html, 'lxml') 
print(type(soup.select('title'))) 
print(soup.select('title')[0].get_text()) 
for title in soup.select('title'):     
print(title.get_text())

学会以上这些,基本就可以自己掌握BeautifulSoup4的使用了
————————————————
版权声明:本文为CSDN博主「赶在日落之前」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lzz781699880/article/details/81209038

BeautifulSoup4 提取数据爬虫用法详解的更多相关文章

  1. Hadoop 数据迁移用法详解

    数据迁移使用场景 冷热集群数据分类存储,详见上述描述. 集群数据整体搬迁.当公司的业务迅速的发展,导致当前的服务器数量资源出现临时紧张的时候,为了更高效的利用资源,会将原A机房数据整体迁移到B机房的, ...

  2. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  3. C语言 sscanf用法详解

    /* sscanf用法详解 */ #include <stdio.h> /* sscanf头文件 */ #include <stdlib.h> #include <str ...

  4. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...

  5. @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...

  6. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  7. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  8. mapminmax的用法详解 _MATLAB

    ============外一篇 有关mapminmax的用法详解 by faruto==================================转自:http://www.ilovematla ...

  9. 【Ext.Net学习笔记】03:Ext.Net DirectEvents用法详解、DirectMethods用法详解

    Ext.Net通过DirectEvents进行服务器端异步的事件处理.[Ext.Net学习笔记]02:Ext.Net用法概览.Ext.Net MessageBus用法.Ext.Net布局 中已经简单的 ...

随机推荐

  1. 牛客 70E 乌龟跑步 (bitset优化dp)

    有一只乌龟,初始在0的位置向右跑. 这只乌龟会依次接到一串指令,指令T表示向后转,指令F表示向前移动一个单位.乌龟不能忽视任何指令.现在我们要修改其中正好n个指令(一个指令可以被改多次,一次修改定义为 ...

  2. HTTP请求管道事件BeginRequest和EndRequest

    这是一个测试示例,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  3. 二、maven学习

    maven工程运行环境修改 例如maven自带Tomcat6,我们想使用Tomcat7 pom.xml #配置多一个Tomcat7<plugins> <plugin> < ...

  4. vue使用scss应该安装哪些依赖

    通过vue-cli搭建的项目如果想使用scss的话除了安装sass-loader,还需要安装node-sass cnpm install sass-loader node-sass -D

  5. mac-svn代码管理

    一.mac下svn管理代码 //1.打开命令行工具,cd 到要拉取的代码放置位置 //2.从svn上拉取项目代码:svn checkout svn项目地址 (--username=XXX --pass ...

  6. php生成器yield

    上次说了php的生成器Iterator,这次说一下yield 迭代生成器 (迭代)生成器也是一个函数,不同的是这个函数的返回值是依次返回, 而不是只返回一个单独的值.或者,换句话说,生成器使你能更方便 ...

  7. Java Web系统架构概览

    大型网站系统架构的演进都是随着业务增长不断演进,所有的出发点都是为了满足业务需求.最初访问量下,功能简单时,单体软件可以解决所有问题:后来访问量逐渐增大,功能愈加丰富,此时单体软件的架构逐渐成为开发和 ...

  8. SQL语句复习【专题四】

    SQL语句复习[专题四] 多表查询 sql 92多表查询 sql92.sql99 标准--查询所有员工的姓名,部门编号,部门名称select * from empselect * from dept- ...

  9. Hadoop_11_HDFS的流式 API 操作

    对于MapReduce等框架来说,需要有一套更底层的API来获取某个指定文件中的一部分数据,而不是一整个文件 因此使用流的方式来操作 HDFS上的文件,可以实现读取指定偏移量范围的数据 1.客户端测试 ...

  10. 使用VMware Workstation15安装RHEL7.5以及相关设置(RHEL7及其以上版本均适用)

    预备信息 VMware Workstation 是VMware公司发布的一款桌面虚拟计算软件,此软件提供虚拟机功能,使计算机可以同时运行多个操作系统. RHEL7.5(Red Hat Enterpri ...