BeautifulSoup简单使用

2019-05-26  本文已影响0人  hcc_9bf4

简单使用:
说明:选择器 ,jquery
基于选择器的使用
from bs4 import BeautifulSoup
使用方式:可以将一个html文件转化为指定的对象;然后通过对象的方法或者属性去查找指定的内容

  1. 转化本地文件:
    soup=BeautifulSoup(open('本地文件',‘lxml’))
  2. 转化网络文件:
    soup=BeautifulSoup('字符串类型或者字节类型',‘lxml’)

例:本地文件soup.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试bs4</title>
</head>
<body>
<div>
甄姬
<p>百里守约</p>
<p>李白</p>
太乙真人
</div>
<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com/" title="赵匡胤" target="_self">宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱</a>
<a href="" class="song">总为浮云能蔽日,长安不见使人愁</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="tang">
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
<li><a href="http://www.sina.com" class="song">杜甫</a></li>
<li><a href="http://www.haha.com" class="song">杜牧</a></li>
<li><b>杜小月</b></li>
<li><i>度蜜月</i></li>
<li><a href="http://www.haha.com" id="yuan">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘</a></li>
</ul>>
</div>
</body>
</html>

’print(soup)‘会把soup.html文件内容打开为字符串,封装str方法
'print(tpye(soup))'会显示''<class 'bs4.BeautifulSoup'>''为bs4.BeautifulSoup的一个类,把类转化为soup对象,然后使用类的方法操作进行对象的操作

1. 根据标签名查找

soup.a 只能找到第一个符合要求的标签

from bs4 import BeautifulSoup
soup = BeautifulSoup(open('soup_test.html',encoding='utf8'),'lxml')
print(soup.a)

<a href="http://www.song.com">宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱</a>

print(type(soup.a))

<class 'bs4.element.Tag'>

<div class="song">
<p>李清照</p>
<p>王安石</p>
<p>苏轼</p>
<p>柳宗元</p>
<a href="http://www.song.com">宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱</a>
</div>

2. 获取属性

获取a的属性。包含href和内容,以href为例:
‘print(soup.a.href)’显示打印:

None
[Finished in 0.4s]

‘print(soup.a['href'])’显示打印:

http://www.song.com
[Finished in 0.4s]

‘print(soup.a['title'])’显示打印:

赵匡胤
[Finished in 0.4s]

‘print(soup.a['target'])’显示打印:

_self
[Finished in 0.4s]

‘print(soup.a.attrs)’显示打印a的所有属性,打印的是一个字典键值对:

{'href': 'http://www.song.com/', 'title': '赵匡胤', 'target': '_self'}
[Finished in 0.4s]

3. 获取内容

print(soup.a.html)打印显示a的内容:

None
[Finished in 0.4s]

错误,没有显示出来

print(soup.a.text)打印显示a的内容:

宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱
[Finished in 0.4s]

正确,可以显示出来
还可以这么写'print(soup.a.string)'显示结果是一样的,如果a标签里还有标签那么显示为None
还可以这么写’print(soup.a.get_text())‘显示结果也一样

4.find方法:

print(soup.find('a'))显示内容为:

<a href="http://www.song.com/" target="_self" title="赵匡胤">宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱</a>
[Finished in 0.4s]

print(soup.find('a',title='qin'))显示内容为:

<a href="http://www.163.com" title="qin">
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>
[Finished in 0.4s]

print(soup.find('a',alt='tang'))显示内容为:

<a alt="tang" href="http://www.126.com">
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君</a>
[Finished in 0.4s]

print(soup.find('a',class_='song'))显示内容为:

<a class="song" href="">总为浮云能蔽日,长安不见使人愁</a>
[Finished in 0.4s]

以上显示第一个标签class='song'的内容
*如果想显示另外标签相同的class时,可以这么用

from bs4 import BeautifulSoup
soup = BeautifulSoup(open('soup_test.html',encoding='utf8'),'lxml')
div =soup.find('div',class_="tang")
print(div.find('a',class_='song'))

打印显示:

<a class="song" href="http://www.sina.com">杜甫</a>
[Finished in 0.4s]

print(soup.find('a',id='yuan'))显示内容为:

<a href="http://www.haha.com" id="yuan">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘</a>
[Finished in 0.4s]

5. find_all方法

soup.find_all('a')
soup.find_all(['a'.'b'])
soup.find_all('a',limit=2)限制前2个

lt=soup.find_all('a')
print(lt,len(lt))

打印内容为所有标签a 及数量8

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

另外查找方法:

from bs4 import BeautifulSoup
soup = BeautifulSoup(open('soup_test.html',encoding='utf8'),'lxml')
div =soup.find('div',class_="tang")
print(div.find_all('a'))
显示:
[<a href="http://www.baidu.com" title="qing">
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村</a>, <a href="http://www.163.com" title="qin">
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>, <a alt="tang" href="http://www.126.com">
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君</a>, <a class="song" href="http://www.sina.com">杜甫</a>, <a class="song" href="http://www.haha.com">杜牧</a>, <a href="http://www.haha.com" id="yuan">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘</a>]
[Finished in 0.4s]

div =soup.find('div',class_="tang")
print(div.find_all(['a','b']))

显示:
[<a href="http://www.baidu.com" title="qing">
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村</a>, <a href="http://www.163.com" title="qin">
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>, <a alt="tang" href="http://www.126.com">
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君</a>, <a class="song" href="http://www.sina.com">杜甫</a>, <a class="song" href="http://www.haha.com">杜牧</a>, <b>杜小月</b>, <a href="http://www.haha.com" id="yuan">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘</a>]
[Finished in 0.4s]

div =soup.find('div',class_="tang")
print(div.find_all('a',limit = 2))

显示:

[<a href="http://www.baidu.com" title="qing">
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村</a>, <a href="http://www.163.com" title="qin">
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>]
[Finished in 0.4s]

6. select方法

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="tang" href="http://www.126.com">
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君</a>, <a class="song" href="http://www.sina.com">杜甫</a>, <a class="song" href="http://www.haha.com">杜牧</a>, <a href="http://www.haha.com" id="yuan">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘</a>]
[Finished in 0.4s]

如果想显示第三个string

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

显示:

<a alt="tang" href="http://www.126.com">
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君</a>
[Finished in 0.4s]

如果想通过ID查找,返回的是一个列表

print(soup.select('#yuan'))

显示:

[<a href="http://www.haha.com" id="yuan">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘</a>]
[Finished in 0.4s]

如果想获取这个列表的汉字内容

print(soup.select('#yuan')[0].text)

凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘
[Finished in 0.4s]

如果想获取href

print(soup.select('#yuan')[0]['href'])

http://www.haha.com
[Finished in 0.4s]

普通对象使用select

div =soup.find('div',class_="tang")
print(div.select('.song'))

[<a class="song" href="http://www.sina.com">杜甫</a>, <a class="song" href="http://www.haha.com">杜牧</a>]
[Finished in 0.4s]

上一篇 下一篇

猜你喜欢

热点阅读