zoukankan      html  css  js  c++  java
  • BeautifulSoup的find()和findAll()

    BeautifulSoup的提供了两个超级好用的方法(可能是你用bs方法中最常用的)。借助这两个函数,你可以通过表现的不同属性轻松过滤HTML(XML)文件,查找需要的标签组或单个标签。

    首先find(),findAll()是当有了bs对象之后,获取标签组或者单个标签的函数。find()找到第一个满足条件的标签就返回,findAll()找到所有满足条件的标签返回。

    看一下两个函数的参数,findAll多了一个limit参数。 #参数不是每次用的时候需要把所有参数都要写出来

    findAll(tag,atributes,recursive,text,limit,keywords)
    find(tag,atributes,recursive,text,keywords)

    实例中多用findAll()函数,因为find()函数只返回一个,没有代表性。

    ①参数tag,可以使用参数tag表明需要查找的标签类型,tag可以是多个:

    .findAll({'h1'}) #返回h1标签列表
    .findAll({'h1','h2','h3'}) #返回h1-h3标题标签列表
    .findAll({'h1','h2','h3','h4','h5','h6','h7'}) #返回所有标题标签的列表

    ②参数attribute,使用标签内的若干属性对应的属性值进行标签查找,属性值可以是多个

    .findAll('span',{'class':{'green','red'}})  #返回class属性为red和green的span标签列表

    ③参数recursive,是否使用递归方法遍历每一个子标签,默认是开启,True。如果设置为False,findAll()只查找文档的一级标签。一般使用中,不用去动这个参数

    ④参数text,根据标签的文本内容去查找标签列表,通常配合正则表达式使用

    nameList = bsObj.findAll(text='the prince') #匹配所有标签文本内容为‘the prince’的标签列表
    nameList = bsObj.findAll(text=re.compile('the*')) #匹配所有标签文本内容为‘the’开头的标签列表,使用了正则表达式re,正则表达式在此文中不做讲解

    ⑤参数limit,范围限制参数,显然只能用于findAll()函数。就是限定返回的个数,比如要抽取多少个标签信息做样本之类的

    ⑥参数keyword,标签内指定属性的标签列表#与attribute参数相似,有一个例外就是用class属性查找标签的时候,直接findAll(class=‘green’)会报错,因为class是保留字

    bsObj.findAll(id='text')

    bsObj.findAll(class='text')  #会报错
    bsObj.findAll(class_='text')解决方案
  • 相关阅读:
    让脚本在后台运行的方式
    inotify+rsync文件实时同步报错:usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0:
    简单使用zabbix监控nginx是否存活
    zabbix4.0添加磁盘io监控
    文本处理三剑客之awk(No.1)
    对比各节点host 与 标准节点host差异脚本
    hdfs standby namenode checkpoint 的一些参数
    hdfs dfsadmin 命令详解
    hive grouping sets 实现原理
    dbcp 连接池参数说明
  • 原文地址:https://www.cnblogs.com/Jacck/p/7772466.html
Copyright © 2011-2022 走看看