Beautifulsoup的Find,find_all,选择方法

Beautifulsoup的Find,find_all,选择方法

from bs4 import BeautifulSoup

lxml 以lxml情势领会html,例:BeautifulSoup(html,’lxml’) #  注:html5lib 容错率最高

find 归来找到的第一个标签

find_all 以list的情势归来找到的一切标签

limit 指定归来的标签个数

attrs 将标签属性放到一个字典中

string 获得标签下的非标准化签名符串(值), 归来字符串

strings 获得标签下的一切非标准化签名符串, 归来天生器。

stripped_strings 获得标签下的一切非标准化签名符串,并剔除空缺字符,归来天生器。

get_text # 获得标签下的一切非标准化签名符串,归来字符串方法

contents、children都是归来某个标签下的径直子元素,包括字符串。 contents 归来一个列表,children 归来一个天生器

select 本领和find_all极端一致

以本质例子作证明:

1、设置一个html,并运用BeautifulSoup的lxml领会

from bs4 import BeautifulSoup

html = '''

<table>

<tr class='a1'>

<td>地位称呼</td>

<td>地位类型</td>

<td>功夫</td>

</tr>

<tr class='a1'>

<td><a id='test' class='test' target='_blank' href='https://www.baidu.com/'>地位一</a></td>

<td>类型一</td>

<td>功夫1</td>

</tr>

<tr class='a2'>

<td><a id='test' class='test' target='_blank' href='https://www.baidu.com/'>地位二</a></td>

<td>类型二</td>

<td>功夫2</td>

</tr class='a3'>

<tr>

<td><a id='test' class='test' target='_blank' href='https://www.baidu.com/'>地位3</a></td>

<td>类型3</td>

<td>功夫3</td>

</tr>

</table>

<div>

这是一个div

<p>

<!-- 这是一个解释 -->

</p>

</div>

'''

soup = BeautifulSoup(html,'lxml') # 领会html

———————————————————— find_all ————————————————————————–

2、获得一切的tr标签 

find 归来找到的第一个标签,find_all以list的情势归来找到的一切标签

trs = soup.find_all('tr') # 归来列表

n=1

for i in trs:

print('第{}个tr标签:'.format(n))

print(i)

n+=1

3、获得第二个tr标签

limit 可指定归来的标签数目

trs = soup.find_all('tr',limit=2)[1] # 从列表中获得第二个元素,limit 获得标签个数

print(trs)

4、获得class=’a1’的tr标签

a.本领一: class_

trs = soup.find_all('tr',class_='a1')

n=1

for i in trs:

print('第{}个class=''a1''的tr标签:'.format(n))

print(i)

n+=1

b.本领二:attrs 将标签属性放到一个字典中

trs = soup.find_all('tr',attrs={'class':'a1'})

n=1

for i in trs:

print('第{}个class=''a1''的tr标签:'.format(n))

print(i)

n+=1

5、索取一切id=’test’且class=’test’的a标签

本领一:class_

alist = soup.find_all('a',id='test',class_='test')

n=1

for i in alist:

print('第{}个id=''test''且class=''test''的a标签:'.format(n))

print(i)

n+=1

本领二:attrs

alist = soup.find_all('a',attrs={'id':'test','class':'test'})

n=1

for i in alist:

print('第{}个id=''test''且class=''test''的a标签:'.format(n))

print(i)

n+=1

6、获得一切a标签的href属性

alist = soup.find_all('a')

#本领一:经过下标获得

for a in alist:

href = a['href']

print(href)

#本领二: 经过attrs获得

for a in alist:

href = a.attrs['href']

print(href)

7、获得一切的地位消息(一切文本消息)

string 获得标签下的非标准化签名符串(值), 归来字符串

注:第一个tr为题目消息,不获得。从第二个tr发端获得。

trs = soup.find_all('tr')[1:]

movies = []

for tr in trs:

move = {}

tds = tr.find_all('td')

move['td1'] = tds[0].string # string 取td的值

move['td2'] = tds[1].string

move['td3'] = tds[2].string

movies.append(move)

print(movies)

8、获得一切非标志性字符

strings 获得标签下的一切非标准化签名符串, 归来天生器。

trs = soup.find_all('tr')[1:]

for tr in trs:

infos = list(tr.strings) # 获得一切非标志性字符,包括换行、空格

print(infos)

9、获得一切非空字符

stripped_strings 获得标签下的一切非标准化签名符串,并剔除空缺字符,归来天生器。

trs = soup.find_all('tr')[1:]

for tr in trs:

infos = list(tr.stripped_strings) # 获得一切非空字符,不包括换行、空格

print(infos)

# stripped_strings 获得一切地位消息

trs = soup.find_all('tr')[1:]

movies = []

for tr in trs:

move = {}

infos = list(tr.stripped_strings)

move['地位'] = infos[0]

move['类型'] = infos[1]

move['功夫'] = infos[2]

movies.append(move)

print(movies)

10、get_text 获得一切地位消息

get_text  获得标签下的一切非标准化签名符串,归来字符串方法

trs = soup.find_all('tr')[1]

text = trs.get_text() # 归来字符串方法

print(text)

———————————————————— select ————————————————————————–

11、获得一切tr标签

trs = soup.select('tr')

for i in trs:

print('tr标签:',i)

12、获得第二个tr标签

trs = soup.select('tr')[1]

print(trs)

13、获得一切class=”al”的tr标签

# 本领一:

trs = soup.select('tr.a1') # tr标签的class属性

for i in trs:

print(i)

# 本领二:

trs = soup.select('tr[class="a1"]') # tr标签的class属性

for i in trs:

print(i)

14、索取一切a标签的href属性

# 本领一:

a = soup.select('a')

for i in a:

print(i['href'])

# 本领二:

a = soup.select('a')

for i in a:

print(i.attrs['href'])

15、获得一切的地位消息

trs = soup.select('tr')

for i in trs:

print(list(i.stripped_strings))

分享到 :
PHP8匹配语法
2021-03-30 下一篇

Leave a Reply

Your email address will not be published. Required fields are marked *