Python爬虫程序设计KC25课件_第1页
Python爬虫程序设计KC25课件_第2页
Python爬虫程序设计KC25课件_第3页
Python爬虫程序设计KC25课件_第4页
Python爬虫程序设计KC25课件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.5.1使用CSS语法2.5.1使用CSS语法2.5.1使用CSS语法BeautifulSoup除了可以用find与find_all函数查找HTML文档树的节点元素外,还可以采用CSS类似的语法来查询,规则是:tag.select(css)其中tag是一个bs4.element.Tag对象,即HTML中的一个element节点元素,select是它的查找方法,css是类似css语法的一个字符串,一般结构如下:[tagName][attName[=value]]其中[...]部分是可选的;tagName是元素名称,如果没有指定就是所有元素;attName=value是属性名称,value是它对应的值,可以不指定属性,在指定了属性后也可以不指定值;tag.select(css)返回一个bs4.element.Tag的列表,哪怕只有一个元素也时一个列表;2.5.1使用CSS语法例2-5-1:soup.select("a")查找文档中所有<a>元素节点;soup.select("pa")查找文档中所有<p>节点下的所有<a>元素节点;soup.select("p[class='story']a")查找文档中所有属性class="story"的<p>节点下的所有<a>元素节点;soup.select("p[class]a")查找文档中所有具有class属性的<p>节点下的所有<a>元素节点;soup.select("a[id='link1']")查找属性id="link1"的<a>节点;soup.select("bodyheadtitle")查找<body>下面<head>下面的<title>节点;soup.select("body[class]")查找<body>下面所有具有class属性的节点;soup.select("body[class]a")查找<body>下面所有具有class属性的节点下面的<a>节点;<head>下面的<title>节点;例2-5-1:soup.select("a")查找文档中所例2-5-2:查找HTML文档中所有<p>下面的<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.select("p[class='story']a")fortagintags:print(tag["href"])

例2-5-2:查找HTML文档中所有<p>下面的<a>的链程序结果:/elsie/lacie/tillie

另外我们通过tags=soup.select("pa")tags=soup.select("a")tags=soup.select("p[class]a")等也可以得到一样的结果。程序结果:2.5.2属性的语法规则2.5.2属性的语法规则在CSS结构中的[attName=value]中表示属性attrName与value相等,也可以指定不等、包含等运算关系,具体运算如下表:选择器描述[attName]用于选取带有指定属性的元素。[attName=value]用于选取带有指定属性和值的元素。[attName^=value]匹配属性值以指定值开头的每个元素。[attName$=value]匹配属性值以指定值结尾的每个元素。[attrName*=value]匹配属性值中包含指定值的每个元素。在CSS结构中的[attName=value]中表示属性at因此:soup.select("a[href='/elsie']")查找href="/elsie"的<a>节点;soup.select("a[href$='sie']")查找href以"sie"结尾的<a>节点;soup.select("a[href^='']")查找href以""开始的<a>节点;soupselect("a[href*='example']")查找href的值中包含"example"字符串的<a>节点;因此:2.5.3select查找子孙节点2.5.3select查找子孙节点2.5.3select查找子孙节点在select(css)中的css有多个节点时,节点元素之间用空格分开,就是查找子孙节点,例如soup.select("divp")是查找所有<div>节点下面的所有子孙<p>节点。

例2-5-3:查找子孙节点frombs4importBeautifulSoupdoc="<div><p>A</p><span><p>B</p></span></div><div><p>C</p></div>"soup=BeautifulSoup(doc,"lxml")tags=soup.select("divp")fortagintags:print(tag)

2.5.3select查找子孙节点程序结果:<p>A</p><p>B</p><p>C</p>其中tags=soup.select("divp")是查找<div>下面的所有子孙节点<p>,因此包含<span>下面的<p>B</p>。程序结果:2.5.4select查找直接子节点2.5.4select查找直接子节点2.5.4select查找直接子节点在select(css)中的css有多个节点时,节点元素之间用">"分开(注意>的前后至少包含一个空格),就是查找直接子节点,例如soup.select("div>p")是查找所有<div>节点下面的所有直接子节点<p>,不包含孙节点。2.5.4select查找直接子节点例2-5-4:查找直接子节点frombs4importBeautifulSoupdoc="<div><p>A</p><span><p>B</p></span></div><div><p>C</p></div>"soup=BeautifulSoup(doc,"lxml")tags=soup.select("div>p")fortagintags:print(tag)

程序结果:<p>A</p><p>C</p>其中tags=soup.select("div>p")是查找<div>下面的直接子节点<p>,因此不包含<span>下面的<p>B</p>。例2-5-4:查找直接子节点2.5.5select查找兄弟节点2.5.5select查找兄弟节点2.5.5select查找兄弟节点在select中用"~"连接两个节点表示查找前一个节点后面的所有同级别的兄弟节点(注意~号前后至少有一个空格),例如soup.select("div~p")查找<div>后面的所有同级别的<p>兄弟节点。在select中用"+"连接两个节点表示查找前一个节点后面的第一个同级别的兄弟节点(注意+号前后至少有一个空格)2.5.5select查找兄弟节点例2-5-5:查找兄弟节点frombs4importBeautifulSoupdoc="<body>demo<div>A</div><b>X</b><p>B</p><span><p>C</p></span><p>D</p></div></body>"soup=BeautifulSoup(doc,"lxml")print(soup.prettify())tags=soup.select("div~p")fortagintags:print(tag)print()tags=soup.select("div+p")fortagintags:print(tag)例2-5-5:查找兄弟节点程序结果:<p>B</p><p>D</p>其中tags=soup.select("div~p")找到<div>后面同级别的所有<p>节点,不包含<span>中的<p>C</p>,因为它与<div>不同级别。而tags=soup.select("div+p")要找<div>的下一个兄弟节点<p>,但是<div>的下一个兄弟节点是<b>X</b>,不是<p>节点,因此没有找到,注意结果不是<p>B</p>。程序结果:2.5.1使用CSS语法2.5.1使用CSS语法2.5.1使用CSS语法BeautifulSoup除了可以用find与find_all函数查找HTML文档树的节点元素外,还可以采用CSS类似的语法来查询,规则是:tag.select(css)其中tag是一个bs4.element.Tag对象,即HTML中的一个element节点元素,select是它的查找方法,css是类似css语法的一个字符串,一般结构如下:[tagName][attName[=value]]其中[...]部分是可选的;tagName是元素名称,如果没有指定就是所有元素;attName=value是属性名称,value是它对应的值,可以不指定属性,在指定了属性后也可以不指定值;tag.select(css)返回一个bs4.element.Tag的列表,哪怕只有一个元素也时一个列表;2.5.1使用CSS语法例2-5-1:soup.select("a")查找文档中所有<a>元素节点;soup.select("pa")查找文档中所有<p>节点下的所有<a>元素节点;soup.select("p[class='story']a")查找文档中所有属性class="story"的<p>节点下的所有<a>元素节点;soup.select("p[class]a")查找文档中所有具有class属性的<p>节点下的所有<a>元素节点;soup.select("a[id='link1']")查找属性id="link1"的<a>节点;soup.select("bodyheadtitle")查找<body>下面<head>下面的<title>节点;soup.select("body[class]")查找<body>下面所有具有class属性的节点;soup.select("body[class]a")查找<body>下面所有具有class属性的节点下面的<a>节点;<head>下面的<title>节点;例2-5-1:soup.select("a")查找文档中所例2-5-2:查找HTML文档中所有<p>下面的<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.select("p[class='story']a")fortagintags:print(tag["href"])

例2-5-2:查找HTML文档中所有<p>下面的<a>的链程序结果:/elsie/lacie/tillie

另外我们通过tags=soup.select("pa")tags=soup.select("a")tags=soup.select("p[class]a")等也可以得到一样的结果。程序结果:2.5.2属性的语法规则2.5.2属性的语法规则在CSS结构中的[attName=value]中表示属性attrName与value相等,也可以指定不等、包含等运算关系,具体运算如下表:选择器描述[attName]用于选取带有指定属性的元素。[attName=value]用于选取带有指定属性和值的元素。[attName^=value]匹配属性值以指定值开头的每个元素。[attName$=value]匹配属性值以指定值结尾的每个元素。[attrName*=value]匹配属性值中包含指定值的每个元素。在CSS结构中的[attName=value]中表示属性at因此:soup.select("a[href='/elsie']")查找href="/elsie"的<a>节点;soup.select("a[href$='sie']")查找href以"sie"结尾的<a>节点;soup.select("a[href^='']")查找href以""开始的<a>节点;soupselect("a[href*='example']")查找href的值中包含"example"字符串的<a>节点;因此:2.5.3select查找子孙节点2.5.3select查找子孙节点2.5.3select查找子孙节点在select(css)中的css有多个节点时,节点元素之间用空格分开,就是查找子孙节点,例如soup.select("divp")是查找所有<div>节点下面的所有子孙<p>节点。

例2-5-3:查找子孙节点frombs4importBeautifulSoupdoc="<div><p>A</p><span><p>B</p></span></div><div><p>C</p></div>"soup=BeautifulSoup(doc,"lxml")tags=soup.select("divp")fortagintags:print(tag)

2.5.3select查找子孙节点程序结果:<p>A</p><p>B</p><p>C</p>其中tags=soup.select("divp")是查找<div>下面的所有子孙节点<p>,因此包含<span>下面的<p>B</p>。程序结果:2.5.4select查找直接子节点2.5.4select查找直接子节点2.5.4select查找直接子节点在select(css)中的css有多个节点时,节点元素之间用">"分开(注意>的前后至少包含一个空格),就是查找直接子节点,例如soup.select("div>p")是查找所有<div>节点下面的所有直接子节点<p>,不包含孙节点。2.5.4select查找直接子节点例2-5-4:查找直接子节点frombs4importBeautifulSoupdoc="<div><p>A</p><span><p>B</p></span></div><div><p>C</p></div>"soup=BeautifulSoup(doc,"lxml")tags=soup.select("div>p")fortagintags:print(tag)

程序结果:<p>A</p><p>C</p>其中tags=soup.select("div>p")是查找<div>下面的直接子节点<p>,因此不包含<span>下面的<p>B</p>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论