python爬虫beautifulsoup4系列4-子节点【转载】

本篇转自博客:上海-悠悠

原文地址:http://www.cnblogs.com/yoyoketang/tag/beautifulsoup4/

前言

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

一、子节点

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

时间: 2024-08-30 07:33:44

python爬虫beautifulsoup4系列4-子节点【转载】的相关文章

python爬虫beautifulsoup4系列4-子节点

前言 很多时候我们无法直接定位到某个元素,我们可以先定位它的父元素,通过父元素来找子元素就比较容易 一.子节点 1.以博客园首页的摘要为例:<div class="c_b_p_desc">这个tag为起点 2.那么div这个tag就是父节点 3."摘要: 前言 本篇详细..."这个string就是上面div的子节点(string通常看成是一个tag的子节点) 4."<a class="c_b_p_desc_readmore&qu

python爬虫beautifulsoup4系列1

前言 以博客园为例,爬取我的博客上首页的发布时间.标题.摘要,本篇先小试牛刀,先了解下它的强大之处,后面讲beautifulsoup4的详细功能. 一.安装 1.打开cmd用pip在线安装beautifulsoup4 >pip install beautifulsoup4 二.解析器 1.我们主要用第一个html.parser,这个是python的标准库,可以直接用.其它几个需要安装对应解析器, 下表列出了主要的解析器,以及它们的优缺点: 三.打印首页博客的时间 1.这里直接定位不好定位到,可以

python爬虫beautifulsoup4系列3【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/beautifulsoup4/ 前言 本篇手把手教大家如何爬取网站上的图片,并保存到本地电脑 一.目标网站 1.随便打开一个风景图的网站:http://699pic.com/sousuo-218808-13-1.html 2.用firebug定位,打开firepath里css定位目标图片 3.从下图可以看出,所有的图片都是img标签,class属性都是lazy 二.用find_all找

python爬虫beautifulsoup4系列3

前言 本篇手把手教大家如何爬取网站上的图片,并保存到本地电脑 一.目标网站 1.随便打开一个风景图的网站:http://699pic.com/sousuo-218808-13-1.html 2.用firebug定位,打开firepath里css定位目标图片 3.从下图可以看出,所有的图片都是img标签,class属性都是lazy 二.用find_all找出所有的标签 1.find_all(class_="lazy")获取所有的图片对象标签 2.从标签里面提出jpg的url地址和titl

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库

Python爬虫Csdn系列III

Python爬虫Csdn系列III By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 说明: 在上一篇博客中,我们已经能够获取一个用户所有文章的链接了,那么这一节自然就是要将这些博客下载下来咯. 分析: 有了链接下载文章自然是不难.但是,获取的数据该怎么处理?每一篇文章都带有格式换行这些信息,自然,我们存储它们也是要存储其对应的html格式的数据的(注意,我们编辑的带有格式的博客或者其他文本都是以html代码格式存储的).如何存?使用数据库

Python爬虫Csdn系列II

Python爬虫Csdn系列II By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 说明: 在上一篇文章中,我们已经知道了只要将程序伪装成浏览器就能访问csdn网页.在这篇文章中,我们将设法获取某个csdn用户的所有文章的链接. 分析: 打开一个某一个的csdn用户的的专栏,可以选择目录视图(如:http://blog.csdn.net/whiterbear?viewmode=contents)和摘要视图(比如:http://blog.cs

python爬虫Pragmatic系列IV

python爬虫Pragmatic系列IV 说明: 在上一篇博客中,我们已经做到了从赶集网上单个首页中抓取所有的链接,并下载下来,分析后存入Excel中. 本次目标: 在本节中,我们将使用python多线程技术从赶集网上抓取链接并分析,注意,我们这次能够抓获的链接数目可以远远大于上一篇博客中抓获的. 分析: 用爬虫统计信息那自然数据越多越好,为了获取更多的数据,我们先研究下如何打开上千个赶集网上公司链接. 打开首页(http://bj.ganji.com/danbaobaoxian/o1/),在

python爬虫Pragmatic系列III

python爬虫Pragmatic系列III 说明: 在上一篇博客中,我们已经学会了从赶集网上的一家公司中提取出有关的信息,并存储到Excel中. 本次目标: 在本节中,我们将批量下载赶集首页上所有的公司界面(注意不是赶集网上所有的公司页面,我们可以把这个留给之后的任务),并批量的处理所有公司的有关信息,并保存到Excel中. 注意: 在上一篇博客中,我们使用的只是匹配赶集网上其中一家公司界面的中信息,而且不幸的是,很多的其他的公司的联系店主模块中的信息数量并不是固定的,即有的是10个li,而有