python爬虫beautiful soup的使用方式

目录
  • 前言
  • 一,Beautiful Soup简介
  • 二,Beautiful Soup的解析器
    • 2.1 各种解析器一览
    • 2.2 引入解析器的语法
  • 三,Beautiful Soup解析得到的四种对象
    • 3.1 四种对象 一览
    • 3.2 bs对象的tag属性
    • 3.3 bs对象的prettify属性及prettify()方法
    • 3.4 bs对象tag对象的属性获取
    • 3.5  NavigableString对象
    • 3.6 comment对象及beautiful soup对象
  • 四,标签的定位
    • 4.1 find()&find_all()方法
    • 4.2 select()方法
    • 4.4 节点之间的各种关系定位函数

前言

 简述bs4:使用pip install beautifulsoup4将bs4包安装到当前的python解释器环境,使用from bs4 import BeautifulSoup导入BeautifulSoup类,进而生成BeautifulSoup类实例并调用实例相应的属性和方法。

bs类似于正则查询字符串,不过不需要我们自己写正则表达式,bs4已经将处理爬虫数据时的实际问题进行了统一归类并提出了解决方法,即:将处理html文档字符串时遇到的问题进行简化并给出api,以便于对html字符串文档进行信息提取和筛选(不需要自己写正则了)。

一,Beautiful Soup简介

Beatifil soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要机取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiul Soup自动将输入文档转换为Unicode编码,输出文档转换为utf8编码。你不需要考虑编码方式,除非文档有指定一个编码方式,这时,Beautiful soup就不能自动识别编码方了。然后,你仅仅需要说明—下原始编码方式就可以了。一般的编码为:utf8,gb2312等。
Beautiful Soup已成为和bxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策胳或强劲的速度。

总结:Beautiful Soup依据给定的解释器来解析html文档,其依据html中标签把html文档在内存中转化为类似于二叉树的数据结构,并通过实现的查询方法来查询二叉树以得到我们想要的爬虫数据。也就是Beautiful Soup专门用于处理html这种有着规范格式的文档字符串,他会自动补全html标签以及根据标签层级结构进行文档格式化,使其更美观,而且支持query各种标签。

二,Beautiful Soup的解析器

2.1 各种解析器一览

2.2 引入解析器的语法

# soup对象 = BeautifulSoup(爬取得到的文档字符串, 解析器)
soup = BeautifulSoup(html, 'lxml')

三,Beautiful Soup解析得到的四种对象

3.1 四种对象 一览

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

具体指代如下:BeautifulSoup指代整个html文档,即document。

3.2 bs对象的tag属性

tag为一个统称,可以具体为html的各种标签,如h1-h6,div,a……等。实际上tag与一个节点对象绑定,这个节点对象拥有string,name,parent,attrs等属性,指代一个html标签。注:只有第一个先出现的tag会被捕捉到。

详细如下图:

举例如下:

soup = BeautifulSoup(html, 'lxml')
title = soup.title # 获取文档的标题,并与变量title绑定

# tag对象常见的属性如下:
title.name # 返回当前tag的标签名称,该属性可读写
title.string # 获取当前tag的navigatiblestring对象
title.parent # 获取当前tag的父节点
title.attrs # 获取当前tag的属性字典

# tag对象常见的方法如下:
title.get('class') # 括号里面写属性名称,title.get('属性名称')
title.get('href')
title.get_text() # 获取tag的元素内容,与string一模一样

3.3 bs对象的prettify属性及prettify()方法

用于打印整个格式化之后的html文档,会自动补全缺少的标签。

from bs4 import BeautifulSoup
soup = BeautifulSoup('<b id="boldest"> ','lxml')
soup.prettify()
soup.prettify
# 上面两个等价

3.4 bs对象tag对象的属性获取

属性可以通过tag['key']来读取,也可以用一个全新的变量来绑定tag的attrs属性进行访问。或者使用tag.get(attr_name)来获取属性的value。另外attrs是一个字典,支持字典的增删改查等操作,从而操作tag的属性。

多值属性指的是某些标签属性如class,charset……等具有多个属性值,如:<class="mmd mmd2 mmd3">,对于这种标签,bs将他们的属性值放在一个list中。而如id等属性只有一个值,他们的属性值为str类型。多值属性列表会自动转换为html里面的多值属性语法格式。

css_soup = BeautifulSoup('<p class="body"></p>')
css_soup.p['class']
# ["body"]

id_soup = BeautifulSoup('<p id="my id"></p>')
id_soup.p['id']
# 'my id'

3.5  NavigableString对象

一般指tag.string,他是一个伪字符串对象,使用str()将其转换为python的字符串即可。转换之后本质上等同于python的字符串类型。所有字符串的属性及对字符串的方法都对其适用。

也可以不使用str()转换,直接使用tag.text就是一个字符串。

他指代某个标签里面的文字内容,而不包括里面嵌套的标签。由于其类似字符串,所以无法修改,但是可以使用replace_with() 方法将其修改为其他字符串。

from bs4 import BeautifulSoup
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>','lxml')
tag = soup.b
print(tag.string)
print(type(tag.string))
# Extremely bold
# <class 'bs4.element.NavigableString'>

#---------------------------------------------------#
unicode_string = str(tag.string)
print(unicode_string)
print(type(unicode_string))
# Extremely bold
# <class 'str'>

#---------------------------------------------------#
tag.string.replace_with("No longer bold")
print(tag)
# No longer bold

3.6 comment对象及beautiful soup对象

了解即可。beautiful soup对象指代document文档对象,本质上也是一个tag;comment指代html文档中的注释内容,是一种特殊的 NavigableString对象,实际中应注意注释混在元素内容之中,造成数据污染。

说其是一种特殊的 NavigableString对象,是因为:tag.string可以为一个 NavigableString对象,也有可能为一个comment对象。但是一般使用tag.string来访问元素内容,而不是元素里面的注释。

使用tag.prettify属性来打印出某个tag里面的所有内容,来判断使元素内容还是注释。

四,标签的定位

使用bs最重要的部分就是标签定位,定位之后才能获取得到我们想要的数据。各种定位方法都是基于对html解析树的操作,类似于二叉树从一个节点向四周寻找节点。所有我们需要做的就是:先定位到一个容易定位的二叉树节点,再从这个节点定位到我们需要的节点。或者使用css选择器精准定位。

4.1 find()&find_all()方法

官方名字为过滤器,实际上就是通过正则匹配到我们想要的字符串。下面只介绍find_all(),find只能找一个,一般不使用。

需要注意find_all()的参数,可以是一个tag_name,一个正则对象,一个列表(如,['div','a']),一个keyword(如,id="mmd"),一个True……

 具体用法如下图:

tag
soup.find_all('b')
# [<b>The Dormouse's story</b>]

正则
import re
for tag in soup.find_all(re.compile("^b")):
    print(tag.name)
# body
# b

列表
soup.find_all(["a", "b"])
# [<b>The Dormouse's story</b>,
#  <a class="sister" href="http://example.com/elsie" rel="external nofollow"  id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" rel="external nofollow"  id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" rel="external nofollow"  id="link3">Tillie</a>]

True
for tag in soup.find_all(True):
    print(tag.name)
# html
# head
# title
# body

方法
def has_class_but_no_id(tag):
    return tag.has_attr('class') and not tag.has_attr('id')
soup.find_all(has_class_but_no_id)
# [<p class="title"><b>The Dormouse's story</b></p>,
#  <p class="story">Once upon a time there were...</p>,
#  <p class="story">...</p>]

常用写法:

4.2 select()方法

参数是一个css选择器。 与前端css中的各种选择器一模一样,这个比find_all()更加常用,毕竟与前端比较类似,容错率高。

soup.select("title")
# [<title>The Dormouse's story</title>]

soup.select("p:nth-of-type(3)")
# [<p class="story">...</p>]

4.4 节点之间的各种关系定位函数

参看官方文档,bs4官方文档

上面的selec和find_all()基本上能够定位到任何位置了,不需要找爸爸找儿子这种形式去定位了。

到此这篇关于python爬虫beautiful soup的使用方式的文章就介绍到这了,更多相关python beautiful soup 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python 中的 BeautifulSoup 网页使用方法解析

    目录 一.安装 二.html.parser解析 三.外部文档解析 四.标签选择器 五.css选择器 六.节点遍历 七.find_all方法 八.find方法 一.安装 Bautiful Soup 是第三方库,因此需要单独下载,下载方式非常简单 由于 BS4 解析页面时需要依赖文档解析器,所以还需要安装 lxml 作为解析库 Python 也自带了一个文档解析库 html.parser, 但是其解析速度要稍慢于 lxml pip install bs4 pip install lxml pip i

  • Python使用BeautifulSoup4修改网页内容的实战记录

    最近有个小项目,需要爬取页面上相应的资源数据后,保存到本地,然后将原始的HTML源文件保存下来,对HTML页面的内容进行修改将某些标签整个给替换掉. 对于这类需要对HTML进行操作的需求,最方便的莫过于 BeautifulSoup4 的库了. 样例的HTML代码如下: <html> <body> <a class="videoslide" href="http://www.test.com/wp-content/uploads/1020/1381

  • python beautifulsoup4 模块详情

    目录 一.BeautifulSoup4 基础知识补充 二.爬虫案例 一.BeautifulSoup4 基础知识补充 BeautifulSoup4 是一款 python 解析库,主要用于解析 HTML 和 XML,在爬虫知识体系中解析 HTML 会比较多一些, 该库安装命令如下: pip install beautifulsoup4 BeautifulSoup 在解析数据时,需依赖第三方解析器,常用解析器与优势如下所示: python 标准库 html.parser:python 内置标准库,容错

  • Python实战快速上手BeautifulSoup库爬取专栏标题和地址

    目录 安装 解析标签 解析属性 根据class值解析 根据ID解析 多层筛选 提取a标签中的网址 实战-获取博客专栏 标题+网址 BeautifulSoup库快速上手 安装 pip install beautifulsoup4 # 上面的安装失败使用下面的 使用镜像 pip install beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple 使用PyCharm的命令行 解析标签 from bs4 import BeautifulS

  • Python爬虫之BeautifulSoup的基本使用教程

    目录 bs4的安装 bs4的快速入门 解析器的比较(了解即可) 对象种类 bs4的简单使用 获取标签内容 获取标签名字 获取a标签的href属性值 遍历文档树 案例练习 思路 代码实现 总结 bs4的安装 要使用BeautifulSoup4需要先安装lxml,再安装bs4 pip install lxml pip install bs4 使用方法: from bs4 import BeautifulSoup lxml和bs4对比学习 from lxml import etree tree = e

  • Python使用Beautiful Soup(BS4)库解析HTML和XML

    目录 一.Beautiful Soup概述: 安装: 二.BeautifulSoup4简单使用 三.BeautifulSoup4四大对象种类 1.Tag:标签 2.NavigableString:标签内部的文字 3.BeautifulSoup:文档的内容 4.Comment:注释 四.遍历文档树所用属性 五.搜索文档树 1.find_all():过滤器 (1)name参数: (2)kwargs参数: (3)attrs参数: (4)text参数: (5)limit参数: 2.find() 六.CS

  • python数据解析BeautifulSoup爬取三国演义章节示例

    目录 数据解析 Beautiful Soup Beautiful Soup用法 案例-爬取三国演义章节及对应的内容 数据解析 数据解析就是将爬取到的整个页面中的局部的内容进行提取.python中常用的数据解析方式有以下三种: bs4(python中独有的) xpath(推荐,通用型强) 正则 数据解析原理概述: 首先我们知道需要解析(提取)的内容都会在标签之间或者标签对应的属性中进行存储 所以我们需进行指定标签的定位 然后将标签或者标签对应的属性中存储的数据值进行提取(解析) Beautiful

  • Python爬取求职网requests库和BeautifulSoup库使用详解

    目录 一.requests库 1.requests简介 2.安装requests库 3.使用requests获取网页数据 我们先导入模块 4.总结requests的一些方法 二.BeautifulSoup库 1.BeautifulSoup简介 2.安装BeautifulSoup库 3.使用BeautifulSoup解析并提取获取的数据 4.BeautifulSoup提取数据的方法 一.requests库 1.requests简介 requests库就是一个发起请求的第三方库,requests允许

  • Python中BeautifulSoup模块详解

    目录 前言 安装库 导入库 解析文档示例 提取数据示例 CSS选择器 实例小项目 总结 前言 BeautifulSoup是主要以解析web网页的Python模块,它会提供一些强大的解释器,以解析网页,然后提供一些函数,从页面中提取所需要的数据,目前是Python爬虫中最常用的模块之一. 安装库 在使用前需要安装库,这里建议安装bs4,也就是第四版本,因为根据官方文档第三版的已经停止更新.同时安装lxml解释器 pip3 install bs4 pip3 install lxml 导入库 from

  • python爬虫beautiful soup的使用方式

    目录 前言 一,Beautiful Soup简介 二,Beautiful Soup的解析器 2.1 各种解析器一览 2.2 引入解析器的语法 三,Beautiful Soup解析得到的四种对象 3.1 四种对象 一览 3.2 bs对象的tag属性 3.3 bs对象的prettify属性及prettify()方法 3.4 bs对象tag对象的属性获取 3.5  NavigableString对象 3.6 comment对象及beautiful soup对象 四,标签的定位 4.1 find()&f

  • Python利用Beautiful Soup模块创建对象详解

    安装 通过 pip 安装 Beautiful Soup 模块:pip install beautifulsoup4 . 还可以使用 PyCharm IDE 来写代码,在 PyCharm 中的 Preferences 中找到 Project ,在里面搜索 Beautiful Soup 模块,进行安装即可. 创建 BeautifulSoup 对象 Beautiful Soup 模块广泛使用从网页中得到数据.我们能够使用 Beautiful Soup 模块从 HTML/XML 文档中提取任何数据,例如

  • Python利用Beautiful Soup模块修改内容方法示例

    前言 其实Beautiful Soup 模块除了能够搜索和导航之外,还能够修改 HTML/XML 文档的内容.这就意味着能够添加或删除标签.修改标签名称.改变标签属性值和修改文本内容等等.这篇文章非常详细的给大家介绍了Python利用Beautiful Soup模块修改内容的方法,下面话不多说,来看看详细的介绍吧. 修改标签 使用的示例 HTML 文档还是如下: html_markup=""" <div class="ecopyramid">

  • Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    前言 要想学好爬虫,必须把基础打扎实,之前发布了两篇文章,分别是使用XPATH和requests爬取网页,今天的文章是学习Beautiful Soup并通过一个例子来实现如何使用Beautiful Soup爬取网页. 什么是Beautiful Soup Beautiful Soup是一款高效的Python网页解析分析工具,可以用于解析HTL和XML文件并从中提取数据. Beautiful Soup输入文件的默认编码是Unicode,输出文件的编码是UTF-8. Beautiful Soup具有将

  • Python利用Beautiful Soup模块搜索内容详解

    前言 我们将利用 Beautiful Soup 模块的搜索功能,根据标签名称.标签属性.文档文本和正则表达式来搜索. 搜索方法 Beautiful Soup 内建的搜索方法如下: find() find_all() find_parent() find_parents() find_next_sibling() find_next_siblings() find_previous_sibling() find_previous_siblings() find_previous() find_al

  • Python使用Beautiful Soup包编写爬虫时的一些关键点

    1.善于利用soup节点的parent属性 比如对于已经得到了如下html代码: <td style="padding-left:0" width="60%"><label>November</label> <input type="Hidden" id="cboMonth1" name="cboMonth1" value="11"> &l

  • python爬虫(入门教程、视频教程) 原创

    python的版本经过了python2.x和python3.x等版本,无论哪种版本,关于python爬虫相关的知识是融会贯通的,我们关于爬虫这个方便整理过很多有价值的教程,小编通过本文章给大家做一个关于python爬虫相关知识的总结,以下就是全部内容: python爬虫的基础概述 1.什么是爬虫 网络爬虫,即Web Spider,是一个很形象的名字.把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的.从网站某一个页面(通常是首页)开始,读

  • 以视频爬取实例讲解Python爬虫神器Beautiful Soup用法

    1.安装BeautifulSoup4 easy_install安装方式,easy_install需要提前安装 easy_install beautifulsoup4 pip安装方式,pip也需要提前安装.此外PyPi中还有一个名字是 BeautifulSoup 的包,那是 Beautiful Soup3 的发布版本.在这里不建议安装. pip install beautifulsoup4 Debain或ubuntu安装方式 apt-get install Python-bs4 你也可以通过源码安

  • Python 爬虫之Beautiful Soup模块使用指南

    爬取网页的流程一般如下: 选着要爬的网址(url) 使用 python 登录上这个网址(urlopen.requests 等) 读取网页信息(read() 出来) 将读取的信息放入 BeautifulSoup 使用 BeautifulSoup 选取 tag 信息等 可以看到,页面的获取其实不难,难的是数据的筛选,即如何获取到自己想要的数据.本文就带大家学习下 BeautifulSoup 的使用. BeautifulSoup 官网介绍如下: Beautiful Soup 是一个可以从 HTML 或

随机推荐