我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python爬虫beautiful soup的使用方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python爬虫beautiful soup的使用方式

前言

 简述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 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python爬虫beautiful soup的使用方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python的爬虫包Beautiful Soup中用正则表达式来搜索

Beautiful Soup使用时,一般可以通过指定对应的name和attrs去搜索,特定的名字和属性,以找到所需要的部分的html代码。 但是,有时候,会遇到,对于要处理的内容中,其name或attr的值,有多种可能,尤其是符合某一规律,
2022-06-04

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

1.善于利用soup节点的parent属性 比如对于已经得到了如下html代码: 2022-06-04

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

1.安装BeautifulSoup4 easy_install安装方式,easy_install需要提前安装easy_install beautifulsoup4pip安装方式,pip也需要提前安装.此外PyPi中还有一个名字是 Beaut
2022-06-04

使用Python Beautiful Soup解析HTML内容的方法

今天小编给大家分享的是使用Python Beautiful Soup解析HTML内容的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目录Beautiful Soup的使用标签选择
2023-07-06

python爬虫的常见方式

requests+bs4+lxml直接获取并解析html数据抓包ajax请求,使用requests获取并解析json数据反爬严重的网站,使用selenium爬取设置代理    a.urllib/requests/selenium+chrom
2023-01-31

爬虫使用代理的不同方式

爬虫代理动态转发与传统api提取的区别: 作为爬虫工作者我们最先接触到的代理的使用方式是通过传统API提取代理,程序通过URL定时获取代理IP信息,需验证IP的可用性、更换代理设置,同时需要设计多线程异步IO,实现代理IP并发处理,不仅繁琐,而且影响效率。 还
爬虫使用代理的不同方式
2019-02-18

python爬虫中分布式爬虫的作用是什么

这篇文章给大家分享的是有关python爬虫中分布式爬虫的作用是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。随着大数据时代的来临,大数据也吸引了越来越多的关注。网络爬虫是一种高效的信息抓取工具,它集成了搜索引
2023-06-15

Python爬虫之线程池的使用方法

这篇文章主要介绍了Python爬虫之线程池的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言学到现在,我们可以说已经学习了爬虫的基础知识,如果没有那些奇奇怪怪的
2023-06-15

玩转python爬虫之cookie使用方法

之前一篇文章我们学习了爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用。 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些
2022-06-04

Python爬虫框架-scrapy的使用

ScrapyScrapy是纯python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,并且包含了各种中间件接口,可以灵活的完成各种需求1、安装
2022-06-02

python爬虫使用request库处理cookie的方法

这篇文章给大家分享的是有关python爬虫使用request库处理cookie的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录