菜鸟笔记
提升您的技术认知

beautifulsoup中find和find-ag真人游戏

爬虫利器beautifulsoup中find和find_all的使用方法

  • 二话不说,先上段html例子

    
        
            index
        
    
    
         
  • hello world
  • 使用beautifulsoup前需要先构建beautifulsoup实例

    # 构建beautifulsoup实例
    soup = beautifulsoup(html,'lxml')
    # 第一个参数是要匹配的内容
    # 第二个参数是beautifulsoup要采用的模块,即规则
    
    • 需要注意的是,导入对的模块需要事先安装,此处导入的lxml事先已经安装。可以导入的模块可通过查询beautifulsoup的文档查看

    接下来是find和find_all的介绍

    1. find
    只返回第一个匹配到的对象
    语法:
    find(name, attrs, recursive, text, **wargs)    
    # recursive 递归的,循环的

    参数:

    参数名 作用
    name 查找标签
    text 查找文本
    attrs 基于attrs参数

    例子:

    # find查找一次
    li = soup.find('li')
    print('find_li:',li)
    print('li.text(返回标签的内容):',li.text)
    print('li.attrs(返回标签的属性):',li.attrs)
    print('li.string(返回标签内容为字符串):',li.string)
    

    运行结果:

    find_li: 
    li.text(返回标签的内容): first item
    li.attrs(返回标签的属性): {'id': 'flask', 'class': ['item-0']}
    li.string(返回标签内容为字符串): first item
    

    find也可以通过‘属性=值’的方法进行匹配

    li = soup.find(id = 'flask')
    print(li,'\n')
    
     
    

    需要注意的是,因为class是python的保留关键字,若要匹配标签内class的属性,需要特殊的方法,有以下两种:

    • 在attrs属性用字典的方式进行参数传递
    • beautifulsoup自带的特别关键字class_
    # 第一种:在attrs属性用字典进行传递参数
    find_class = soup.find(attrs={'class':'item-1'})
    print('findclass:',find_class,'\n')
    # 第二种:beautifulsoup中的特别关键字参数class_
    beautifulsoup_class_ = soup.find(class_ = 'item-1')
    print('beautifulsoup_class_:',beautifulsoup_class_,'\n')
    

    运行结果:

    findclass:  
    beautifulsoup_class_:  
    

    2. find_all
    返回所有匹配到的结果,区别于find(find只返回查找到的第一个结果)
    语法:
    find_all(name, attrs, recursive, text, limit, **kwargs)

    参数名 作用
    name 查找标签
    text 查找文本
    attrs 基于attrs参数

    与find一样的语法

    上代码

    # find_all 查找所有
    li_all = soup.find_all('li')
    for li_all in li_all:
    	print('---')
    	print('匹配到的li:',li_all)
    	print('li的内容:',li_all.text)
    	print('li的属性:',li_all.attrs)
    

    运行结果:

    ---
    匹配到的li: 
    li的内容: first item
    li的属性: {'id': 'flask', 'class': ['item-0']}
    ---
    匹配到的li: 
    li的内容: second item
    li的属性: {'class': ['item-1']}
    ---
    匹配到的li: 
    li的内容: third item
    li的属性: {'cvlass': 'item-inactie'}
    ---
    匹配到的li: 
    li的内容: fourth item
    li的属性: {'class': ['item-1']}
    ---
    匹配到的li: 
    li的内容: fifth item
    

    附上比较灵活的find_all查询方法:

    # 最灵活的使用方式
    li_quick = soup.find_all(attrs={'class':'item-1'})
    for li_quick in li_quick:
    	print('最灵活的查找方法:',li_quick)
    

    运行结果:

    最灵活的查找方法: 
    最灵活的查找方法: 
    

    完整代码:

    # coding=utf8
    # @author= caijunxuan
    # @qq=469590490
    # @wechat:15916454524
    # beautifulsoup
    # 导入beautifulsoup模块
    from bs4 import beautifulsoup
    # html例子
    html = '''
        
            
                index
            
        
        
             
  • hello world
  • ''' # 构建beautifulsoup实例 soup = beautifulsoup(html,'lxml') # 第一个参数是要匹配的内容 # 第二个参数是beautifulsoup要采用的模块,即规则 # html.parser是python内置的结构匹配方法,但是效率不如lxml所以不常用 # lxml 采用lxml模块 # html5lib,该模块可以将内容转换成html5对象 # 若想要以上功能,就需要具备对应的模块,比如使用lxml就要安装lxml # 在bs4当中有很多种匹配方法,但常用有两种: # find查找一次 li = soup.find('li') print('find_li:',li) print('li.text(返回标签的内容):',li.text) print('li.attrs(返回标签的属性):',li.attrs) print('li.string(返回标签内容为字符串):',li.string) print(50*'*','\n') # find可以通过'属性 = 值'的方法进行select li = soup.find(id = 'flask') print(li,'\n') # 因为class是python的保留关键字,所以无法直接查找class这个关键字 # 有两种方法可以进行class属性查询 # 第一种:在attrs属性用字典进行传递参数 find_class = soup.find(attrs={'class':'item-1'}) print('findclass:',find_class,'\n') # 第二种:beautifulsoup中的特别关键字参数class_ beautifulsoup_class_ = soup.find(class_ = 'item-1') print('beautifulsoup_class_:',beautifulsoup_class_,'\n') # find_all 查找所有 li_all = soup.find_all('li') for li_all in li_all: print('---') print('匹配到的li:',li_all) print('li的内容:',li_all.text) print('li的属性:',li_all.attrs) # 最灵活的使用方式 li_quick = soup.find_all(attrs={'class':'item-1'}) for li_quick in li_quick: print('最灵活的查找方法:',li_quick)
    网站地图