python爬虫利器之BeautifulSoup的用法

BeautifulSoup简介

Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据。

下面为官方解释:

Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。 Beautiful Soup 已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。

安装

由于现在BeautifulSoup已经移植到bs4,所以我们需要安装bs

pip install bs4
pip install BeautifulSoup4

示例使用

其他不在多说,下面我们来提供一些示例来进行参考

下面是我创建的一个本地html文件来做解析使用

test.html

<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>测试bs4</title>
</head>
<body>
	<div>
		<p>百里守约</p>
	</div>
	<div class="song">
		<p>李清照</p>
		<p>王安石</p>
		<p>苏轼</p>
		<p>柳宗元</p>
		<a href="http://www.song.com/" title="赵匡胤" target="_self">
			<span>this is span</span>
		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
		<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
		<img src="http://www.baidu.com/meinv.jpg" alt="" />
	</div>
	<div class="tang">
		<ul>
			<li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
			<li><b>杜小月</b></li>
			<li><i>度蜜月</i></li>
			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
		</ul>
	</div>
</body>
</html>

基础配置

导包、打开文件、加载对象

from bs4 import  BeautifulSoup
import lxml

if __name__ == "__main__":
    #想要将本地的html文档中的数据加载到该对象中
    fp = open('test.html','r',encoding='utf-8')
    soup = BeautifulSoup(fp,'lxml')

示例一

print(soup.a)

返回

示例一从返回结果可以看出返回的只是第一个a标签

示例二

print(soup.find('div'))

返回

示例二可以看出返回的也是div的第一个标签,和soup.div是等同的

示例三

print(soup.find('div',class_ = 'song').text)

返回

从返回值可以看出返回的是标签里的内容

示例四

print(soup.find_all('a'))

返回

[<a href="http://www.song.com/" target="_self" title="赵匡胤">
<span>this is span</span>
		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>, <a class="du" href="">总为浮云能蔽日,长安不见使人愁</a>, <a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a>, <a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>, <a alt="qi" href="http://www.126.com">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a>, <a class="du" href="http://www.sina.com">杜甫</a>, <a class="du" href="http://www.dudu.com">杜牧</a>, <a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>]

从返回值可以看出返回的是所有的a标签组成的一个列表

示例五

print(soup.select('.tang'))

返回

从返回值可以看出返回的是整个class标签里的内容

示例六

print(soup.select('.tang > ul > li > a')[0].text)

返回

从返回值可以看出返回的是一级一级标签下面的内容

发表评论

后才能评论