from bs4 import BeautifulSoup
html = """
<html><body>
<tr class="h">
<td class="1" width="374">职位名称</td>
<td >职位类别</td>
<td >人数</td>
<td >地点</td>
<td >发布时间</td>
</tr>
<tr class="even">
<td >22989-金融云区块链高级研发工程师</td>
<td >技术类</td>
<td >5</td>
<td >上海</td>
<td >2018-1-9</td>
</tr>
<tr class="even">
<td>22989-高级后台开发</td>
<td >技术类</td>
<td >1</td>
<td >深圳</td>
<td >2017-11-25</td>
</tr>
<div>
<ui>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive" id="test"><a href="link3.html"><span class="bold">third item</span></a></li>
</ui>
</div>>
</body></html>
<b><!--Hey,buddy.want to buy a used parser?--><b>
"""
soup = BeautifulSoup(html, 'lxml')
#获取所有li标签
lis = soup.find_all('li')
for li in lis:
print(li)
print('-'*50)
#获取第二个li标签
lis = soup.find_all('li')
print(lis[1])
#获取所有class等于item-0的li标签
lis = soup.find_all('li', class_='item-0') #加下划线防止重名
lis = soup.find_all('li', attrs={'class':'item-0'})
print(lis)
#将所有id等于test,class等于item-inactive的li标签提取出来
lis = soup.find_all('li', class_='item-inactive', id='test')
print(lis)
#获取所有a标签的href属性
as_ = soup.find_all('a')
for a in as_:
# 1
# href = a['href']
# 2
href = a.attrs['href']
print(href)
获取所有的职位信息(纯文本)
trs = soup.find_all('tr')[1:]
list = []
for tr in trs:
print(list(tr.stripped_strings)) #方法一
infos = {} #方法二
tds = tr.find_all('td')
职位名称 = tds[0].string
职位类别 = tds[1].string
人数 = tds[2].string
地点 = tds[3].string
发布时间 = tds[4].string
infos['职位名称'] = 职位名称
infos['职位类别'] = 职位类别
infos['人数'] = 人数
infos['地点'] = 地点
infos['发布时间'] = 发布时间
list.append(infos)
print(list)
find_all的使用:
1、在提取标签的时候,第一个参数是标签的名字。如果在提取标签的时候想要使用标签属性进行过滤,那么可以在这个方法中通过关键字参数的形式,将属性的名字以及对应的值传进去,或者是使用attrs属性,将所有的属性以及对应的值放在一个字典中传给attrs属性。
2、有时,在提取标签的时候,不想提取那么多,可以使用limit参数限制提取个数。
find与find_all的区别:
1、find:找到第一个满足条件的标签就返回,只返回一个元素。
2、find_all:将所有满足条件的标签都返回,返回多个(以列表的形式)。
使用find和find_all的过滤条件:
1、关键字参数:将属性的名字作为关键字参数的名字,以及属性的值作为关键字参数的值进行过滤。
2、attrs参数:将属性条件放到一个字典中,传给attrs参数。