前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫beautifulsoup4系列4-子节点​

python爬虫beautifulsoup4系列4-子节点​

作者头像
上海-悠悠
发布2018-04-08 16:38:00
1.8K0
发布2018-04-08 16:38:00
举报
文章被收录于专栏:从零开始学自动化测试

前言

很多时候我们无法直接定位到某个元素,我们可以先定位它的父元素,通过父元素来找子元素就比较容易,简单一点来说就是通过父亲找儿子。

一、子节点

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.通过下标可以取出对应的子节点

代码语言:javascript
复制
# coding:utf-8
from bs4 import BeautifulSoup
import requests

r = requests.get("http://www.cnblogs.com/yoyoketang/")
# 请求首页后获取整个html界面
blog = r.content
# 用html.parser解析html
soup = BeautifulSoup(blog, "html.parser")
# find方法查找页面上第一个属性匹配的tag对象
tag_soup = soup.find(class_="c_b_p_desc")
# len函数获取子节点的个数
print len(tag_soup.contents)
# 循环打印出子节点
for i in tag_soup.contents:
    print i

# 通过下标取出第1个string子节点
print tag_soup.contents[0]
# 通过下标取出第2个a子节点
print tag_soup.contents[1]

三、.children

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

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

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

四、.descendants

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

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

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

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

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

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

六、参考代码:

代码语言:javascript
复制
# coding:utf-8
from bs4 import BeautifulSoup
import requests

r = requests.get("http://www.cnblogs.com/yoyoketang/mvc/blog/sidecolumn.aspx?blogApp=yoyoketang")
# 请求首页后获取整个html界面
blog = r.content
# 用html.parser解析html
soup = BeautifulSoup(blog, "html.parser")
tag_soup = soup.find(class_="catListTag")

# print body.prettify()

ul_soup = tag_soup.find_all("a")
print ul_soup
for i in ul_soup:
    print i.string
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档