本文主要是介绍Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用bs4
(BeautifulSoup
)
-
数据解析的作用?
- 用来实现聚焦爬虫
-
网页中显示的数据都是存储在那里的?
- 都是存储在
html
的标签中或者是标签的属性中
- 都是存储在
-
数据解析的通用原理是什么?
- 指定标签的定位
- 取出标签中存储的数据或者标签属性中的数据
-
bs4
解析原理- 实例化一个
BeautifulSoup
对象,且待解析的页面源码数据加载到该对象中 - 调用
BeautifulSoup
对象中相关方法或者属性进行标签定位和文本数据的提取
- 实例化一个
-
环境的安装
pip install lxml #解析器 pip install bs4
-
BeautifulSoup
对象的实例化:BeautifulSoup(file,'lxml')
用来将本地存储的html
文档中的数据进行解析BeautifulSoup(page_text,'lxml')
用来将互联网上请求的页面源码数据进行解析
我们来看这段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="" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li><li><a href="" class="du">杜甫</a></li><li><a href="" 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>
bs4
的使用:
from bs4 import BeautifulSoup
file = open('./test.html', 'r', encoding='utf-8')
soup = BeautifulSoup(file, 'lxml')
soup # 打印出完整页面源码
-
标签定位:
-
soup.tagName
:只可以定位到第一次出现的tagName标签soup.p # <p>百里守约</p>
-
-
属性定位
-
soup.find('tagName',attrName=value)
:定位到第一次出现的tagName
标签举例:
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> http://www.song.com/
soup.find('a', id='feng')
打印结果:
<a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>
# soup.findAll:跟find一样作属性定位,只不过findAll返回的是列表,定位到所有满足条件的标签 soup.findAll('a', id='feng')
打印结果:
[<a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>]
-
-
选择器定位:
soup.selec
t(‘选择器’)-
类选择器
-
id选择器
-
层级选择器
-
>
大于号 表示一个层级soup.select('.tang > ul > li')
-
空格表示隔多个层级
soup.select('.tang li')
其结果都是:
[ <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="">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li> <li><a class="du" href="">杜甫</a></li> <li><a class="du" href="">杜牧</a></li> <li><b>杜小月</b></li> <li><i>度蜜月</i></li> <li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li> ]
-
-
-
取数据
-
.text
:返回的是该标签下所有的文本内容 -
.string
:返回的是该标签直系的文本内容
a_tag = soup.find('a', id='feng') # <a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a> a_tag.text a_tag.string
打印结果:
凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘
# 另一个例子 a_tag=soup.find('div',class_='song') a_tag.strings '''<generator object Tag._all_strings at 0x00000200F390BAC0>''' # 不同的编译器显示不同a_tag.text ''' 李清照 王安石 苏轼 柳宗元this is span宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱 总为浮云能蔽日,长安不见使人愁 '''
-
-
取属性
-
a_tag['attrName']
-
a_tag.a['attrName']
a_tag['class'] # 打印结果 ['song']a_tag.a['href'] # 打印结果 http://www.song.com/
-
这篇关于Python爬虫从入门到精通:(6)数据解析2_使用bs4(BeautifulSoup)_Python涛哥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!