Python 库学习笔记—— BeautifulSoup 处理子标签、后代标签、兄弟标签和父标签

本文介绍了使用BeautifulSoup处理网页数据的方法,包括子标签、后代标签、兄弟标签及父标签的选择技巧,并通过实例演示如何定位特定元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们来看一个简单的网页https://www.pythonscraping.com/pages/page3.html,打开后:

右键“检查”(谷歌浏览器)查看元素:

用导航树的形式简单表示出来:

可知:

tr 是 table的子标签

tr、th、td、img、span 标签都是 table 的后代标签

 

一般情况下,bbs0bj.body.h1 选择的是 body 标签后代里的第一个 h1 标签,不会去找 body 外面的标签

类似的,bs0bj.div.findall("img") 会找到第一个div标签,然后获取这个 div 后代里面所有的img标签

1. 处理子标签和后代标签

如果你想获得子标签,可以用 .children 标签:

 

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html)

for child in bsObj.find("table",{"id":"giftList"}).children:
    print(child)

 

部分结果如下:

如果你用descendants()函数,就会获得每个后代标签

 

2. 处理兄弟标签

BeautifulSoup 中的 next_siblings()很擅长处理带标题行的表格:

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html, "html.parser")

for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings:
    print(sibling) 

得到部分结果如下:


 

如果你很擅长找到一组兄弟标签中的最后一个标签,那么 previous_siblings() 函数

另外,next_sibling(),previous_siblings() 返回单个标签

 

 

 

3. 处理父亲标签

抓取网页的时候,父标签用到的很少,用 parent 和 parents 抓取,举个例子:

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html, "html.parser")
print(bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())

输出:

$15.00
 
可以这样理解:
 
 

(1)选择图片标签

(2)选择图片标签的父标签<td>

(3)选择标签<td>前面的一个兄弟标签

(4)选择标签中的文字

 

 

参考资料:《Python网络数据采集》

$15.00
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值