简单使用:
说明:选择器 ,jquery
基于选择器的使用
from bs4 import BeautifulSoup
使用方式:可以将一个html文件转化为指定的对象;然后通过对象的方法或者属性去查找指定的内容
- 转化本地文件:
soup=BeautifulSoup(open('本地文件',‘lxml’)) - 转化网络文件:
soup=BeautifulSoup('字符串类型或者字节类型',‘lxml’)
例:本地文件soup.html
测试bs4
甄姬
百里守约
李白
太乙真人
>
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君
- 杜甫
- 杜牧
- 杜小月
- 度蜜月
- 凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘
’print(soup)‘会把soup.html文件内容打开为字符串,封装str方法
'print(tpye(soup))'会显示''
1. 根据标签名查找
soup.a 只能找到第一个符合要求的标签
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('soup_test.html',encoding='utf8'),'lxml')
print(soup.a)
- 查找a标签:
soup.a---->print(soup.a)显示如下:
print(type(soup.a))
- 查找div标签
print(soup.div)显示:
2. 获取属性
- soup.a.attrs 获取所有属性和值,返回一个字典
- soup.a.attrs['href'] 获取href属性
- soup.a['href'] 也可简写为这种形式
获取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]
- 以上获取a的属性方法等价于‘print(soup.a.attrs['href'])’<<=>>‘print(soup.a['href'])’
3. 获取内容
- soup.a.string
- soup.a.text
- soup.a.get_text()
如果标签还有标签,那么string获取到的结果为None ,而其他两个可以获取文本内容
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方法:
- soup.find('a') 找到第一个符合要求的a
- soup.find('a',title="xxx")
- soup.find('a',alt="xxx")
- soup.find('a',class_="xxx")
- soup.find('a',id="xxx")
- find方法不仅soup可以调用,普通的div对象也能调用,会去指定的div里面去找符合要求的节点
- find找到的都是第一个符合要求的标签
print(soup.find('a'))显示内容为:
宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱
[Finished in 0.4s]
print(soup.find('a',title='qin'))显示内容为:
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山
[Finished in 0.4s]
print(soup.find('a',alt='tang'))显示内容为:
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君
[Finished in 0.4s]
print(soup.find('a',class_='song'))显示内容为:
总为浮云能蔽日,长安不见使人愁
[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'))
打印显示:
杜甫
[Finished in 0.4s]
print(soup.find('a',id='yuan'))显示内容为:
凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘
[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
[宋朝是最强大的王朝,不是军队的强大。而是经济很强大,国民都很有钱, 总为浮云能蔽日,长安不见使人愁,
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村,
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山,
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君, 杜甫, 杜牧, 凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘] 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'))
显示:
[
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村,
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山,
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君, 杜甫, 杜牧, 凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘]
[Finished in 0.4s]
- 可以打印a标签和b标签
div =soup.find('div',class_="tang")
print(div.find_all(['a','b']))
显示:
[
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村,
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山,
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君, 杜甫, 杜牧, 杜小月, 凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘]
[Finished in 0.4s]
- 找到所有a标签只选前2个
div =soup.find('div',class_="tang")
print(div.find_all('a',limit = 2))
显示:
[
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村,
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山]
[Finished in 0.4s]
6. select方法
select选择器返回的永远是一个列表,需要通过下标提取指定的
对象,获取属性和节点
该方法也可以通过普通对象调用,找到都是这个对象下面符合要求的所有节点
- 根据选择器选择指定的内容
常见的选择器:标签选择器,类选择器,id选择器,组合选择器,层级选择器,伪类选择器,属性选择器
a 标签选择器
.dudu 类选择器
井号lala(#lala) id选择器
a, .duu, #lala, .meme 组合选择器
div空格,dudu空格#lala空格.meme空格,xixi层级选择器---》没有要求,下面好多级
div > p > a >.lala只能是下面一级
input[name='lala']属性选择器
类tang下面标签ul下面li下面的所有a标签,返回的是一个列表
print(soup.select('.tang > ul > li > a'))
显示:
[
清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指鲜花村,
秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山,
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君, 杜甫, 杜牧, 凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘]
[Finished in 0.4s]
如果想显示第三个string
print(soup.select('.tang > ul > li > a')[2])
显示:
气王宅里寻常见,催九堂前几度闻,正是江南好风景,落花时节又逢君
[Finished in 0.4s]
如果想通过ID查找,返回的是一个列表
print(soup.select('#yuan'))
显示:
[凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,近代衣冠成古丘]
[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'))