前言

很多时候我们无法直接定位到某个元素,我们可以先定位它的父元素,通过父元素来找子元素就比较容易

一、子节点

1.以博客园首页的摘要为例:<div class="c_b_p_desc">这个tag为起点

2.那么div这个tag就是父节点

3."摘要: 前言 本篇详细。。。"这个string就是上面div的子节点(string通常看成是一个tag的子节点)

4."<a class="c_b_p_desc_readmore" href="http://www.cnblogs.com/yoyoketang/p/6906558.html">阅读全文</a>"这个也是div的子节点

二、.contents

1.tag对象contents可以获取所有的子节点,返回的是list

2.len()函数统计子节点的个数

3.通过下标可以取出对应的子节点

 1 # coding:utf-8
 2 from bs4 import BeautifulSoup
 3 import requests
 4
 5 r = requests.get("http://www.cnblogs.com/yoyoketang/")
 6 # 请求首页后获取整个html界面
 7 blog = r.content
 8 # 用html.parser解析html
 9 soup = BeautifulSoup(blog, "html.parser")10 # find方法查找页面上第一个属性匹配的tag对象
11 tag_soup = soup.find(class_="c_b_p_desc")12 # len函数获取子节点的个数
13 print len(tag_soup.contents)14 # 循环打印出子节点
15 for i in tag_soup.contents:
16     print i
17
18 # 通过下标取出第1个string子节点
19 print tag_soup.contents[0]
20 # 通过下标取出第2个a子节点
21 print tag_soup.contents[1]

三、.children

1.点children这个生成的是list对象,跟上面的点contents功能一样

2.只是这里是list对象,就只能for循环读出了,不能通过下标获取

(一般上面那个contents用的比较多,可能children性能更快吧,我猜想的嘿嘿!)

四、.descendants

1.上面的contents只能获取该元素的直接子节点,如果这个元素的子节点又有子节点(也就是孙节点了),这时候获取所有的子孙节点就可以用.descendants方法

2.获取div的子节点有两个,子孙节点有三个,因为a标签下还有个“阅读全文”这个string子节点

 1 # coding:utf-8
 2 from bs4 import BeautifulSoup
 3 import requests
 4
 5 r = requests.get("http://www.cnblogs.com/yoyoketang/")
 6 # 请求首页后获取整个html界面
 7 blog = r.content
 8 # 用html.parser解析html
 9 soup = BeautifulSoup(blog, "html.parser")
10 # find方法查找页面上第一个属性匹配的tag对象
11 tag_soup = soup.find(class_="c_b_p_desc")
12
13 # len函数获取子节点的个数
14 print len(list(tag_soup.children))
15
16 # 获取子孙节点的个数
17 print len(list(tag_soup.descendants))
18
19 for i in tag_soup.descendants:
20     print i

五、爬取博客首页的标签内容

1.博客左侧的标签并不是这个链接:http://www.cnblogs.com/yoyoketang/

2.通过抓包可以看到,这个url地址是:http://www.cnblogs.com/yoyoketang/mvc/blog/sidecolumn.aspx?blogApp=yoyoketang

2.可以先定位父元素:<div class="catListTag">

六、参考代码:

 1 # coding:utf-8
 2 from bs4 import BeautifulSoup
 3 import requests
 4
 5 r = requests.get("http://www.cnblogs.com/yoyoketang/mvc/blog/sidecolumn.aspx?blogApp=yoyoketang")
 6 # 请求首页后获取整个html界面
 7 blog = r.content
 8 # 用html.parser解析html
 9 soup = BeautifulSoup(blog, "html.parser")
10 tag_soup = soup.find(class_="catListTag")
11
12 # print body.prettify()
13
14 ul_soup = tag_soup.find_all("a")
15 print ul_soup
16 for i in ul_soup:
17     print i.string

对python接口自动化有兴趣的,可以加python接口自动化QQ群:226296743

也可以关注下我的个人公众号:

转载于:https://www.cnblogs.com/yoyoketang/p/6931209.html

python爬虫beautifulsoup4系列4-子节点相关推荐

  1. python爬虫Pragmatic系列IV

    python爬虫Pragmatic系列IV By 白熊花田(http://blog.csdn.net/whiterbear) 说明: 在上一篇博客中,我们已经做到了从赶集网上单个首页中抓取所有的链接, ...

  2. Python爬虫技术系列-06requests完成yz网数据采集V01

    Python爬虫技术系列-06requests完成yz网数据采集V01 1.yz网数据爬取概述 2. 案例实现 2.1 模拟登录页面分析 2.2 模拟登录实现 2.3 构建待爬取的药材名称 2.4 药 ...

  3. Python爬虫学习系列教程

    大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫 ...

  4. Python爬虫学习系列教程-----------爬虫系列 你值的收藏

    静觅 » Python爬虫学习系列教程:http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把 ...

  5. Python 爬虫学习 系列教程

    Python爬虫 --- 中高级爬虫学习路线 :https://www.cnblogs.com/Eeyhan/p/14148832.html 看不清图时,可以把图片保存到本地在打开查看... Pyth ...

  6. 用爬虫抓取动态加载数据丨Python爬虫实战系列(6)

    提示:最新Python爬虫资料/代码练习>>戳我直达 前言 抓取动态加载数据 话不多说,开练! 爬虫抓取动态加载数据 确定网站类型 首先要明确网站的类型,即是动态还是静态.检查方法:右键查 ...

  7. python爬虫Pragmatic系列III

    python爬虫Pragmatic系列III By 白熊花田(http://blog.csdn.net/whiterbear) 说明: 在上一篇博客中,我们已经学会了从赶集网上的一家公司中提取出有关的 ...

  8. python爬虫Pragmatic系列II

    python爬虫Pragmatic系列II By 白熊花田(http://blog.csdn.net/whiterbear) 说明: 在上一篇博客中,我们已经学会了如何下载一个网页,并进行简单的分析它 ...

  9. Python爬虫入门系列——Urllib详解

    Python爬虫入门系列--Urllib详解 1.背景 1.1 初识爬虫 1.2 合法性 1.3 robots协议 2.要求 2.1 当前开发环境 2.2 编程基础 3.快速上手Urllib 3.1 ...

最新文章

  1. MATLAB从入门到精通-Matlab R2020b中的新标记符号(New-marker-symbols)
  2. 今年跳槽可以再等等。
  3. 【虚拟主机篇】asp页面实现301重定向方法
  4. Linux Shell脚本入门教程系列之(十)Shell for循环
  5. linux docker run怎么退出,详解如何进入、退出docker容器的方法
  6. Halcon:基本例程
  7. 计算机组成原理(白中英)简答题复习
  8. jQuery实现表单提交验证
  9. Android ASM插桩
  10. JS实现省市县三级联动
  11. 2019级软件工程应用与实践-人工智能快递柜(代码分析11)
  12. Cass符号填充设置
  13. html论坛发帖案例
  14. 微信小程序JSwxs获取当前时间戳
  15. 省编码市编码区县编码_如何摆脱编码的束缚,走向事业
  16. MySql数据类型-读书笔记
  17. 我九点钟上计算机课用英语怎么说,9点18分的英语怎么写(9点18用英语怎么说二种)...
  18. 记录下Tesla V100s vmware EXTI 7.0 虚拟机直通显卡cuda、cudnn安装
  19. HTTP/1.1、HTTP/2
  20. 【机器学习】贝叶斯分类三大实战项目:高斯模型进行疾病诊断、多项式模型进行文本分类、伯努利模型进行好/差评判别

热门文章

  1. [待总结]高频率vim命令
  2. Google发布了能理解人类语言的云服务
  3. DeepLearning tutorial(2)机器学习算法在训练过程中保存参数
  4. node学习篇02-模块机制
  5. python函数解释
  6. 聊聊LettucePoolingConnectionProvider
  7. python学习笔记-5.18
  8. HTML5音乐播放器(四):播放列表与播放方式
  9. 适用于System Center 2016所需前期准备工作
  10. Window 2003证书服务器迁移到Windows 2008 R2