首先,我们来看一个简单的网页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. DDD领域驱动设计 - 设计文档模板
  2. 安卓中級教程(5):ScrollView與refreshable之間的設置
  3. C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)
  4. 解决pageControl页面设置无效问题
  5. SQL Server 触发器创建、删除、修改、查看示例
  6. JavaScript高级程序设计(九):基本概念----函数
  7. Centos6 下启动httpd报错 Could not reliably determine the server&#39;s解决方法
  8. bzoj1632 [Usaco2007 Feb]Lilypad Pond
  9. Trie/最短的名字
  10. web常见效果之轮播图
  11. 结构化您的Python工程
  12. POJ 3264 Balanced Lineup(模板题)【RMQ】
  13. SNF开发平台WinForm-平板拍照及扫描二维码功能
  14. SpringCloud之声明式服务调用 Feign(三)
  15. 最近用到的 sql 统计操作
  16. 在windows10上安装caffe和tensorflow
  17. linux convert mp3 to wav and opus to wav
  18. ABAP-年月期间搜索帮助
  19. 【硬件】- 英特尔CPU命名规则
  20. 配置 Sliverlight 跨域访问策略

热门文章

  1. LoadRunner中,参数化时Unique取值方式的理解
  2. python009 Python3 列表
  3. AI Gossip
  4. Codeforces603E - Pastoral Oddities
  5. 实体类与实体DTO类之间的转换
  6. BZOJ1986: [USACO2004 Dec] Dividing the Path 划区灌溉
  7. ThinkPHP __construct和_initialize的使用
  8. Codeforces 645D Robot Rapping Results Report【拓扑排序+二分】
  9. The Bottom of a Graph
  10. css三大特性