bs4进行数据解析基础教程


from bs4 import BeautifulSoup
import os
fp = open('C:/Users/axyzw/Downloads/爬虫课件/第三章:数据解析./test.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml')

源文件

<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>
#soup.tagName:返回的是文档中第一次出现的tagName对应的标签
print(soup.a)#a标签很多组,只返回了一组
<a href="http://www.song.com/" target="_self" title="赵匡胤">
<span>this is span</span>
		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
print(soup.div)
<div>
<p>百里守约</p>
</div>
#find('tagName'):等同于soup.div
print(soup.find('div'))
<div>
<p>百里守约</p>
</div>
#属性定位 soup.find('div',class_/id/attr='song')
print(soup.find('div',class_='song'))# class需要加下划线,不加的话不代表属性
<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com/" target="_self" title="赵匡胤">
<span>this is span</span>
		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
<a class="du" href="">总为浮云能蔽日,长安不见使人愁</a>
<img alt="" src="http://www.baidu.com/meinv.jpg"/>
</div>
#soup.find_all('tagName'):返回符合要求的所有标签(列表)
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>]
#select('某种选择器(id,class,标签...选择器)'),返回的是一个列表。
print(soup.select('.tang'))
[<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 alt="qi" href="http://www.126.com">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
<li><a class="du" href="http://www.sina.com">杜甫</a></li>
<li><a class="du" href="http://www.dudu.com">杜牧</a></li>
<li><b>杜小月</b></li>
<li><i>度蜜月</i></li>
<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
</ul>
</div>]
#soup.select('.tang > ul > li > a'):>表示的是一个层级
print(soup.select('.tang > ul > li > 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>]
print(soup.select('.tang > ul > li > a')[0])
<a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a>
#oup.select('.tang > ul a'):空格表示的多个层级  效果和原本一样
print(soup.select('.tang > ul a')[0])
<a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a>
#获取标签之间的文本数据:
#            - soup.a.text/string/get_text()
print(soup.select('.tang > ul a')[0].text)
print(soup.select('.tang > ul a')[0].string)
print(soup.select('.tang > ul a')[0].get_text())
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村
#- text/get_text():可以获取某一个标签中所有的文本内容,不属于直系也能获取
#            - string:只可以获取该标签下面直系的文本内容
print(soup.find('div',class_='song').text)
李清照
王安石
苏轼
柳宗元

this is span
		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱
总为浮云能蔽日,长安不见使人愁


print(soup.find('div',class_='song').string)#该内容下面没有直系属性
None
#        - 获取标签中属性值:
#            - soup.a['href']
print(soup.select('.tang > ul a')[0]['href'])
http://www.baidu.com

上一篇:portable实现嵌套表格


下一篇:android – 使用ZXing本地获取使用条形码编号的产品信息