版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.3.1BeautifulSoup查找HTML元素2.3.1BeautifulSoup查找HTML元素2.3.1BeautifulSoup查找HTML元素查找文档的元素是我们爬取网页信息的重要手段,BeautifulSoup提供了一系列的查找元素的方法,其中功能强大的find_all函数就是其中常用的一个方法。find_all函数的原型如下:find_all(self,name=None,attrs={},recursive=True,text=None,limit=None,**kwargs)self表明它是一个类成员函数;name是要查找的tag元素名称,默认是None,如果不提供,就是查找所有的元素;attrs是元素的属性,它是一个字典,默认是空,如果提供就是查找有这个指定属性的元素;2.3.1BeautifulSoup查找HTML元素recursive指定查找是否在元素节点的子树下面全范围进行,默认是True;后面的text、limit、kwargs参数比较复杂,将在后面用到时介绍;find_all函数返回查找到的所有指定的元素的列表,每个元素是一个bs4.element.Tag对象。find_all函数是查找所有满足要求的元素节点,如果我们只查找一个元素节点,那么可以使用find函数,它的原型如下:find(self,name=None,attrs={},recursive=True,text=None,limit=None,**kwargs)使用方法与find_all类似,不同的是它只返回第一个满足要求的节点,不是一个列表。recursive指定查找是否在元素节点的子树下面全范围进行例2-3-1:查找文档中的<title>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tag=soup.find("title")print(type(tag),tag)
程序结果:<class'bs4.element.Tag'><title>TheDormouse'sstory</title>由此可见查找到<title>元素,元素类型是一个bs4.element.Tag对象。例2-3-1:查找文档中的<title>元素例2-3-2:查找文档中的所有<a>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all("a")fortagintags:print(tag)
程序结果找到3个<a>元素:<aclass="sister"href="/elsie"id="link1">Elsie</a><aclass="sister"href="/lacie"id="link2">Lacie</a><aclass="sister"href="/tillie"id="link3">Tillie</a>例2-3-2:查找文档中的所有<a>元素例2-3-3:查找文档中的第一个<a>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tag=soup.find("a")print(tag)
程序结果找到第一个<a>元素:<aclass="sister"href="/elsie"id="link1">Elsie</a>例2-3-3:查找文档中的第一个<a>元素例2-3-4:查找文档中class="title"的<p>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tag=soup.find("p",attrs={"class":"title"})print(tag)
程序结果找到class="title"的<p>元素<pclass="title"><b>TheDormouse'sstory</b></p>很显然如果使用:tag=soup.find("p")也能找到这个元素,因为它是文档的第一个<p>元素。例2-3-4:查找文档中class="title"的<p>元例2-3-5:查找文档中class="sister"的元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all(name=None,attrs={"class":"sister"})fortagintags:print(tag)例2-3-5:查找文档中class="sister"的元素其中name=None表示无论是什么名字的元素,程序结果找到3个:aclass="sister"href="/elsie"id="link1">Elsie</a><aclass="sister"href="/lacie"id="link2">Lacie</a><aclass="sister"href="/tillie"id="link3">Tillie</a>对于这个文档,很显然语句:tags=soup.find_all("a")或者:tags=soup.find_all("a",attrs={"class":"sister"})效果一样。
其中name=None表示无论是什么名字的元素,程序结果找到2.3.2BeautifulSoup获取元素的属性值2.3.2BeautifulSoup获取元素的属性值2.3.2BeautifulSoup获取元素的属性值如果一个元素已经找到,例如找到<a>元素,那么怎么样获取它的属性值呢?BeautifulSoup使用:tag[attrName]来获取tag元素的名称为attrName的属性值,其中tag是一个bs4.element.Tag对象。2.3.2BeautifulSoup获取元素的属性值例2-3-6:查找文档中所有超级链接地址frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all("a")fortagintags:print(tag["href"])
程序结果:/elsie/lacie/tillie例2-3-6:查找文档中所有超级链接地址2.3.3BeautifulSoup获取元素包含的文本值2.3.3BeautifulSoup获取元素包含的文本值2.3.3BeautifulSoup获取元素包含的文本值如果一个元素已经找到,例如找到<a>元素,那么怎么样获取它包含的文本值呢?BeautifulSoup使用:tag.text来获取tag元素包含的文本值,其中tag是一个bs4.element.Tag对象。2.3.3BeautifulSoup获取元素包含的文本值例2-3-7:查找文档中所有<a>超级链接包含的文本值frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all("a")fortagintags:print(tag.text)
程序结果:ElsieLacieTillie例2-3-7:查找文档中所有<a>超级链接包含的文本值例2-3-8:查找文档中所有<p>超级链接包含的文本值frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find("p")fortagintags:print(tag.text)程序结果:TheDormouse'sstory
Onceuponatimetherewerethreelittlesisters;andtheirnameswereElsie,LacieandTillie;andtheylivedatthebottomofawell.
...其中第二个<p>包含的值就是<p>节点子树下面所有文本节点的组合值。例2-3-8:查找文档中所有<p>超级链接包含的文本值2.3.4BeautifulSoup高级查找2.3.4BeautifulSoup高级查找一般find或者find_all都能满足我们的需要,如果还不能那么可以设计一个查找函数来进行查找。
例2-3-9:我们查找文档中的href="/lacie"的节点元素<a>frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><ahref="/elsie">Elsie</a><ahref="/lacie">Lacie</a><ahref="/tillie">Tillie</a></body></html>'''defmyFilter(tag):print()return(=="a"andtag.has_attr("href")andtag["href"]=="/lacie")
soup=BeautifulSoup(doc,"lxml")tag=soup.find_all(myFilter)print(tag)一般find或者find_all都能满足我们的需要,如果还不程序结果:htmlheadtitlebodyaaa[<ahref="/lacie">Lacie</a>]程序结果:说明:在程序中我们定义了一个筛选函数myFilter(tag),它的参数是tag对象,在调用soup.find_all(myFilter)时程序会把每个tag元素传递给myFilter函数,由该函数决定这个tag的取舍,如果myFilter返回True就保留这个tag到结果集中,不然就丢掉这个tag。因此程序执行时可以看到html,body,head,title,body,a,a,a等一个个tag经过myFilter的筛选,只有节点<ahref="/lacie">Lacie</a>满足要求,因此结果为:[<ahref="/lacie">Lacie</a>]其中:是tag的名称;tag.has_attr(attName)判断tag是否有attName属性;tag[attName]是tag的attName属性值;说明:例2-3-10:通过函数查找可以查找到一些复杂的节点元素,查找文本值以"cie"结尾所有<a>节点frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><ahref="/elsie">Elsie</a><ahref="/lacie">Lacie</a><ahref="/tillie">Tillie</a><ahref="/tilcie">Tilcie</a></body></html>'''defendsWith(s,t):iflen(s)>=len(t):returns[len(s)-len(t):]==treturnFalse
defmyFilter(tag):return(=="a"andendsWith(tag.text,"cie"))
soup=BeautifulSoup(doc,"lxml")tags=soup.find_all(myFilter)fortagintags:print(tag)例2-3-10:通过函数查找可以查找到一些复杂的节点元素,查程序结果:<ahref="/lacie">Lacie</a><ahref="/tilcie">Tilcie</a>程序中定义了一个endsWIth(s,t)函数判断s字符串是否以字符串t结尾,是就返回True,不然返回False,在myFilter中调用这个函数判断tag.text是否以"cie"结尾,最后找出所有文本值以"cie"结尾的<a>节点。程序结果:2.3.1BeautifulSoup查找HTML元素2.3.1BeautifulSoup查找HTML元素2.3.1BeautifulSoup查找HTML元素查找文档的元素是我们爬取网页信息的重要手段,BeautifulSoup提供了一系列的查找元素的方法,其中功能强大的find_all函数就是其中常用的一个方法。find_all函数的原型如下:find_all(self,name=None,attrs={},recursive=True,text=None,limit=None,**kwargs)self表明它是一个类成员函数;name是要查找的tag元素名称,默认是None,如果不提供,就是查找所有的元素;attrs是元素的属性,它是一个字典,默认是空,如果提供就是查找有这个指定属性的元素;2.3.1BeautifulSoup查找HTML元素recursive指定查找是否在元素节点的子树下面全范围进行,默认是True;后面的text、limit、kwargs参数比较复杂,将在后面用到时介绍;find_all函数返回查找到的所有指定的元素的列表,每个元素是一个bs4.element.Tag对象。find_all函数是查找所有满足要求的元素节点,如果我们只查找一个元素节点,那么可以使用find函数,它的原型如下:find(self,name=None,attrs={},recursive=True,text=None,limit=None,**kwargs)使用方法与find_all类似,不同的是它只返回第一个满足要求的节点,不是一个列表。recursive指定查找是否在元素节点的子树下面全范围进行例2-3-1:查找文档中的<title>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tag=soup.find("title")print(type(tag),tag)
程序结果:<class'bs4.element.Tag'><title>TheDormouse'sstory</title>由此可见查找到<title>元素,元素类型是一个bs4.element.Tag对象。例2-3-1:查找文档中的<title>元素例2-3-2:查找文档中的所有<a>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all("a")fortagintags:print(tag)
程序结果找到3个<a>元素:<aclass="sister"href="/elsie"id="link1">Elsie</a><aclass="sister"href="/lacie"id="link2">Lacie</a><aclass="sister"href="/tillie"id="link3">Tillie</a>例2-3-2:查找文档中的所有<a>元素例2-3-3:查找文档中的第一个<a>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tag=soup.find("a")print(tag)
程序结果找到第一个<a>元素:<aclass="sister"href="/elsie"id="link1">Elsie</a>例2-3-3:查找文档中的第一个<a>元素例2-3-4:查找文档中class="title"的<p>元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tag=soup.find("p",attrs={"class":"title"})print(tag)
程序结果找到class="title"的<p>元素<pclass="title"><b>TheDormouse'sstory</b></p>很显然如果使用:tag=soup.find("p")也能找到这个元素,因为它是文档的第一个<p>元素。例2-3-4:查找文档中class="title"的<p>元例2-3-5:查找文档中class="sister"的元素frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all(name=None,attrs={"class":"sister"})fortagintags:print(tag)例2-3-5:查找文档中class="sister"的元素其中name=None表示无论是什么名字的元素,程序结果找到3个:aclass="sister"href="/elsie"id="link1">Elsie</a><aclass="sister"href="/lacie"id="link2">Lacie</a><aclass="sister"href="/tillie"id="link3">Tillie</a>对于这个文档,很显然语句:tags=soup.find_all("a")或者:tags=soup.find_all("a",attrs={"class":"sister"})效果一样。
其中name=None表示无论是什么名字的元素,程序结果找到2.3.2BeautifulSoup获取元素的属性值2.3.2BeautifulSoup获取元素的属性值2.3.2BeautifulSoup获取元素的属性值如果一个元素已经找到,例如找到<a>元素,那么怎么样获取它的属性值呢?BeautifulSoup使用:tag[attrName]来获取tag元素的名称为attrName的属性值,其中tag是一个bs4.element.Tag对象。2.3.2BeautifulSoup获取元素的属性值例2-3-6:查找文档中所有超级链接地址frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all("a")fortagintags:print(tag["href"])
程序结果:/elsie/lacie/tillie例2-3-6:查找文档中所有超级链接地址2.3.3BeautifulSoup获取元素包含的文本值2.3.3BeautifulSoup获取元素包含的文本值2.3.3BeautifulSoup获取元素包含的文本值如果一个元素已经找到,例如找到<a>元素,那么怎么样获取它包含的文本值呢?BeautifulSoup使用:tag.text来获取tag元素包含的文本值,其中tag是一个bs4.element.Tag对象。2.3.3BeautifulSoup获取元素包含的文本值例2-3-7:查找文档中所有<a>超级链接包含的文本值frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find_all("a")fortagintags:print(tag.text)
程序结果:ElsieLacieTillie例2-3-7:查找文档中所有<a>超级链接包含的文本值例2-3-8:查找文档中所有<p>超级链接包含的文本值frombs4importBeautifulSoupdoc='''<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="/elsie"class="sister"id="link1">Elsie</a>,<ahref="/lacie"class="sister"id="link2">Lacie</a>and<ahref="/tillie"class="sister"id="link3">Tillie</a>;andtheylivedatthebottomofawell.</p><pclass="story">...</p></body></html>'''soup=BeautifulSoup(doc,"lxml")tags=soup.find("p")fortagintags:print(tag.text)程序结果:TheDormouse'sstory
Onceuponatimetherewerethreelittlesisters;andtheirnameswereElsie,LacieandTillie;andtheylivedatthebottomofawell.
...其中第二个<p>包含的值就是<p>节点子树下面所有文本节点的组
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水泥发泡鱼塘施工方案(3篇)
- 青岛营销方案系统(3篇)
- 化工夏季防洪应急预案(3篇)
- 老乡鸡营销方案(3篇)
- 维修技术标准化
- 深入解析GIPR下游信号调控网络:鉴定、机制与医学启示
- 淡水养殖生物有机肥的研制与应用:技术、效果与展望
- 淀山湖浮游生物群落结构:特征解析与环境关联研究
- 液晶弹性体及结构中应力波传播特性的多维度探究
- 湖南省岳阳市云溪区2026年七年级下学期期中考试数学试题附答案
- 2026福州鼓楼攀登信息科技有限公司招聘1人笔试历年参考题库附带答案详解
- 河南省活性炭码上换监管预警系统-20260415
- 2026年山东春考《艺术设计类专业知识》模拟试题及答案解析
- 2026年事业单位公开招聘考试(综合类)试题与答案
- 工地二十四小时工作制度
- 2025年四川省省级机关公开遴选考试真题(附答案)
- 2026年统编版二年级道德与法治下册每课教学设计
- 2025年西藏拉萨市检察院书记员考试题(附答案)
- TSG08-2026《特种设备使用管理规则》全面解读课件
- 2026年疫情期间应急处置演练方案及演练记录范本
- 第三单元 认识国家制度 单元检测(含答案)-2025-2026学年八年级下册统编版道德与法治
评论
0/150
提交评论