• 初识python 之 爬虫:BeautifulSoup 的 find、find_all、select 方法


    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))
    世风之狡诈多端,到底忠厚人颠扑不破; 末俗以繁华相尚,终觉冷淡处趣味弥长。
  • 相关阅读:
    2-3 vue配置介绍
    2-2 vue环境搭建以及vue-cli使用
    2-1 nodejs和npm的安装和环境搭建
    Babel
    vue-resource使用 (vue仿百度搜索)
    Google浏览器清除缓存快捷键
    browsersync即时刷新页面
    【高可用HA】Apache (2) —— Mac下安装多个Apache Tomcat实例
    【高可用HA】Apache (1) —— Mac下安装Apache Httpd到自定义路径(非/etc/apache2)
    Apache CXF实现Web Service(5)—— GZIP使用
  • 原文地址:https://www.cnblogs.com/simple-li/p/11253312.html
Copyright © 2020-2023  润新知