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 importBeautifulSoup
html= '''
职位名称 | 职位类别 | 时间 |
职位一 | 类别一 | 时间1 |
职位二 | 类别二 | 时间2 |
职位3 | 类别3 | 时间3 |
这是一个div
------------------------------------------------------------ find_all --------------------------------------------------------------------------
2、获取所有的tr标签
find 返回找到的第一个标签,find_all以list的形式返回找到的所有标签
trs = soup.find_all('tr') #返回列表
n=1
for i intrs: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 intrs:print('第{}个class=''a1''的tr标签:'.format(n))print(i)
n+=1
b.方法二:attrs 将标签属性放到一个字典中
trs = soup.find_all('tr',attrs={'class':'a1'})
n=1
for i intrs: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 inalist: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 inalist:print('第{}个id=''test''且class=''test''的a标签:'.format(n))print(i)
n+=1
6、获取所有a标签的href属性
alist = soup.find_all('a')#方法一:通过下标获取
for a inalist:
href= a['href']print(href)#方法二: 通过attrs获取
for a inalist:
href= ['href']print(href)
7、获取所有的职位信息(所有文本信息)
string 获取标签下的非标签字符串(值), 返回字符串
注:第一个tr为标题信息,不获取。从第二个tr开始获取。
trs = soup.find_all('tr')[1:]
movies=[]for tr intrs:
move={}
tds= tr.find_all('td')
move['td1'] = tds[0].string #string 取td的值
move['td2'] = tds[1].string
move['td3'] = tds[2].string
(move)print(movies)
8、获取所有非标记性字符
strings 获取标签下的所有非标签字符串, 返回生成器。
trs = soup.find_all('tr')[1:]for tr intrs:
infos= list() #获取所有非标记性字符,包含换行、空格
print(infos)
9、获取所有非空字符
stripped_strings 获取标签下的所有非标签字符串,并剔除空白字符,返回生成器。
trs = soup.find_all('tr')[1:]for tr intrs:
infos= list(tr.stripped_strings) #获取所有非空字符,不包含换行、空格
print(infos)
#stripped_strings 获取所有职位信息
trs = soup.find_all('tr')[1:]
movies=[]for tr intrs:
move={}
infos=list(tr.stripped_strings)
move['职位'] =infos[0]
move['类别'] = infos[1]
move['时间'] = infos[2]
(move)print(movies)
10、get_text 获取所有职位信息
get_text 获取标签下的所有非标签字符串,返回字符串格式
trs = soup.find_all('tr')[1]
text= trs.get_text() #返回字符串格式
print(text)
------------------------------------------------------------ select --------------------------------------------------------------------------
11、获取所有tr标签
trs = ('tr')for i intrs:print('tr标签:',i)
12、获取第二个tr标签
trs = ('tr')[1]print(trs)
13、获取所有class="al"的tr标签
#方法一:
trs = ('tr.a1') #tr标签的class属性
for i intrs:print(i)#方法二:
trs = ('tr[class="a1"]') #tr标签的class属性
for i intrs:print(i)
14、提取所有a标签的href属性
#方法一:
a = ('a')for i ina:print(i['href'])#方法二:
a = ('a')for i ina:print(['href'])
15、获取所有的职位信息
trs = ('tr')for i intrs:print(list(i.stripped_strings))
欢迎查漏补遗!!