BeautifulSoup简单使用

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

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

例:本地文件soup.html





测试bs4



甄姬

百里守约


李白


太乙真人




’print(soup)‘会把soup.html文件内容打开为字符串,封装str方法
'print(tpye(soup))'会显示''''为bs4.BeautifulSoup的一个类,把类转化为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'))

[杜甫, 杜牧]
[Finished in 0.4s]

你可能感兴趣的:(BeautifulSoup简单使用)