python库学习笔记——BeautifulSoup处理子标签、后代标签、兄弟标签和父标签
2024-09-24 23:58:15
首先,我们来看一个简单的网页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
最新文章
- DDD领域驱动设计 - 设计文档模板
- 安卓中級教程(5):ScrollView與refreshable之間的設置
- C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)
- 解决pageControl页面设置无效问题
- SQL Server 触发器创建、删除、修改、查看示例
- JavaScript高级程序设计(九):基本概念----函数
- Centos6 下启动httpd报错 Could not reliably determine the server&#39;s解决方法
- bzoj1632 [Usaco2007 Feb]Lilypad Pond
- Trie/最短的名字
- web常见效果之轮播图
- 结构化您的Python工程
- POJ 3264 Balanced Lineup(模板题)【RMQ】
- SNF开发平台WinForm-平板拍照及扫描二维码功能
- SpringCloud之声明式服务调用 Feign(三)
- 最近用到的 sql 统计操作
- 在windows10上安装caffe和tensorflow
- linux convert mp3 to wav and opus to wav
- ABAP-年月期间搜索帮助
- 【硬件】- 英特尔CPU命名规则
- 配置 Sliverlight 跨域访问策略
热门文章
- LoadRunner中,参数化时Unique取值方式的理解
- python009 Python3 列表
- AI Gossip
- Codeforces603E - Pastoral Oddities
- 实体类与实体DTO类之间的转换
- BZOJ1986: [USACO2004 Dec] Dividing the Path 划区灌溉
- ThinkPHP __construct和_initialize的使用
- Codeforces 645D Robot Rapping Results Report【拓扑排序+二分】
- The Bottom of a Graph
- css三大特性