beautifulsoup解析文档

本文介绍了Beautiful Soup库,主要用于Python中的网页数据抓取。文章梳理了官方文档,讲解了如何创建Beautiful Soup对象,四大对象(Tag、NavigableString、BeautifulSoup、Comment)及其用法,遍历和搜索文档树的方法,以及如何使用CSS选择器来查找元素。
摘要由CSDN通过智能技术生成
Beautiful Soup的简介

简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:

开启Beautiful Soup 之旅

在这里先分享官方文档链接,不过内容是有些多,也不够条理,在此本文章做一下整理方便大家参考。
官方文档

创建 Beautiful Soup 对象
首先必须要导入 bs4 库

	from bs4 import BeautifulSoup

我们创建一个字符串,后面的例子我们便会用它来演示

	html = """
	<html><head><title>The Dormouse's story</title></head>
	<body>
	<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
	<p class="story">Once upon a time there were three little sisters; and their names were
	<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
	<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
	<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
	and they lived at the bottom of a well.</p>
	<p class="story">...</p>
	"""

另一种方法:利用urllib来获取网页文档。

	response=urllib.request.Request(url=url,headers=headers)	
    webPage=urllib.request.urlopen(response)
	req_obj = webPage.read().decode('utf-8')
	html=response.read()
	soup = BeautifulSoup(req_obj,'html5lib')

另外,我们还可以用本地 HTML 文件来创建对象,例如

soup = BeautifulSoup(open('index.html'))

上面这句代码便是将本地 index.html 文件打开,用它来创建 soup 对象

下面我们来打印一下 soup 对象的内容,格式化输出

print soup.prettify()

输出:就是上面HTML中的所有内容。

四大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

(1)Tag
Tag 是什么?通俗点讲就是 HTML 中的一个个标签,例如:

<title>The Dormouse's story</title>

,

	<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

上面的 title a 等等 HTML 标签加上里面包括的内容就是 Tag,下面我们来感受一下怎样用 Beautiful Soup 来方便地获取 Tags

下面每一段代码中注释部分即为运行结果:

soup = BeautifulSoup(html)
print(soup.title)
print(soup.a)
print(soup.p)
'''
输出:
<title>The Dormouse's story</title>
<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
'''

它查找的是在所有内容中的第一个符合要求的标签,
我们可以验证一下这些对象的类型

	print(type(soup.title))
	
	'''
	输出:
	<class 'bs4.element.Tag'>
	'''

对于 Tag,它有两个重要的属性,是 nameattrs,下面我们分别来感受一下:

name:
soup 对象本身比较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称。

	soup = BeautifulSoup(html)
	print(soup.name)
	print(soup.head.name)
	
	'''
	输出:
	[document]
	
	'''

attrs

soup = BeautifulSoup(html)
print(soup.p.attrs)


'''
输出:
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
上面是定义的P;下面是输出的内容:
{'class': ['title'], 'name': 'dromouse'}

'''

在这里,我们把 p 标签的所有属性打印输出了出来,得到的类型是一个字典。

如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什么

soup = BeautifulSoup(html)
print(soup.p['class'])


'''
输出:
['title']
'''

还可以这样,利用get方法,传入属性的名称,二者是等价的

	soup = BeautifulSoup(html)
	print(soup.p.get('class'))
	
	
	'''
	输出:
	['title']
	'''

我们可以对这些属性和内容等等进行修改,例如

soup.p['class']="newClass"
print (soup.p)


'''
输出:
<p class="newClass" name="dromouse"><b>The Dormouse's story</b></p>
'''

还可以对这个属性进行删除,例如

del (soup.p['class'])
print (soup.p)


'''
输出:
<p class="newClass" name="dromouse"><b>The Dormouse's story</b></p>
'''

不过,对于修改删除的操作,不是我们的主要用途,在此不做详细介绍了,如果有需要,请查看前面提供的官方文档

(2)NavigableString

既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的文字怎么办呢?很简单,用 .string 即可,例如

	print (soup.p.string)
	print (type(soup.p.string))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值