第三章 数据解析(十) 2019-12-20

十、bs4 – find和find_all方法

 

搜索文档树:


1、find和find_all方法:


搜索文档树,一般用得比较多的就是两个方法,一个是find,一个是find_all。find方法是找到第一个满足条件的标签后就立即返回,只返回一个元素。find_all方法是把所有满足条件的标签都选到,然后返回回去。


find_all使用:

1、在提取标签时,第一个参数是标签的名字。然后如果在提取标签时想要使用标签属性进行过滤,那可以在这个方法中通过关键字参数的形式,将属性的名字以及对应的值传进去。或者使用attrs属性,将所有的属性以及对应值放在一个字典中传给attrs属性。

2、有些时候,在提取标签时,不想提取那么多,那可以使用limit参数。限制提取多少个。


find与find_all区别:

1、find:找到第一个满足条件的标签就返回。只会返回一个元素。

2、find_all:将所有满足条件的标签都返回。会返回很多标签(列表形式)。

 

使用find和find_all的过滤条件:

1、关键字参数:将属性的名字作为关键字参数的名字,以及属性的值作为关键字参数的值进行过滤。

2、attrs参数:将属性条件放到一个字典中,传给attrs参数。


获取标签的属性:

1、通过下标获取:通过标签的下标的方式。

href = a[‘href’]

2、通过attrs属性获取,示例代码:

href = a.attrs[‘href’]


示例代码:

#  网页代码(编)

from bs4 import BeautifulSoup

html = """

   

       

           

           

           

           

           

       

       

           

           

           

           

       

       

           

           

           

           

       

       

           

           

           

           

       

       

           

           

           

           

       

   

职位名称 职位类别 人数 地点 发布时间

           

技术类 1 深圳 2017-11-25

           

技术类 1 深圳 2017-11-25

           

技术类 1 深圳 2017-11-24

           

技术类 1 深圳 2017-11-24

"""

soup = BeautifulSoup(html,'lxml')

 

# 1、获取所有tr标签

# print(soup.tr)

# print(soup.find('tr'))

# trs = soup.find_all('tr')

# for tr in trs:

#    print(tr)

#    print('-'*50)  # 用分隔符分离数据


# 2、获取第2个tr标签

# tr = soup.find_all('tr',limit=2)[1]

# print(tr)

 

# 3、获取所有class等于even的tr标签

# 第一种方法

# trs = soup.find_all('tr', class_='even')

# for tr in trs:

#    print(tr)

#    print('-'*50)

# 第二种方法

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

# for tr in trs:

#    print(tr)

#    print('-'*50)

 

# 4、将所有id等于test.class也等于test的a标签提取出来

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

# for a in lists:

#    print(a)

 

# 5、获取所有a标签的href属性

# alist = soup.find_all('a')

# for a in alist:

#    # 1.方法

#    # href = a['href']

#    # print(href)

#    # 2.方法

#    href = a.attrs['href']

#    print(href)

 

# 6、获取所有职位信息(纯文本)

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

list1 = []

for tr in trs:

    info = {}

    tds = tr.find_all('td')

    # 1、方法

    # name = tds[0].string

    # category = tds[1].string

    # number = tds[2].string

    # place = tds[3].string

    # time = tds[4].string

    # info['name'] = name

    # info['category'] = category

    # info['number'] = number

    # info['place'] = place

    # info['time'] = time

    # 2、方法

    infos = list(tr.stripped_strings)

    print(infos)

#    list1.append(info)

# print(list1)



上一篇文章 第三章 数据解析(九) 2019-12-19 地址: 

https://www.jianshu.com/p/207d1084e9f7

下一篇文章 第三章 数据解析(十一) 2019-12-21 地址:

https://www.jianshu.com/p/316f6974f6c5



以上资料内容来源网络,仅供学习交流,侵删请私信我,谢谢。

你可能感兴趣的:(第三章 数据解析(十) 2019-12-20)