beautiful soup解析

find(tag, attributes, recursive, text, keywords)

find:匹配从上到下第一个出现的值

findAll(tag, attributes, recursive, text, limit, keywords)

findAll方法 参数说明:

  1. tag:传入一个标签的名称或多个标签名组成的 python 列表

    • .findAll(a)
    • .findAll(['h1','h2','h3','h4'])
  2. attributes:使用一个 python 字典封装一个标签的若干属性和对应的属性值。tag参数需要加入,不特指的话,可以给空字符串

    • .findAll('span',{'class':{'green','red'}})
  3. recursive:该递归参数是一个布尔变量。值为 True ,表示递归查询(子标签+后代标签);值为 Flase ,表示仅查询该文档的一级标签。默认值为 True 。

  4. text:使用标签的文本内容去匹配,而不是使用标签的属性。假如我们想查找网页文档中包含 “the price” 内容的标签数量。例子如下

    • nameList = html.findAll(text='the price')

    • 其 nameList 变量的返回值是一个整型值,表示匹配到的包含该内容的标签的数量

  5. limit:只能用于 findAll 方法,find 方法其实等价于 limit 等于1。表示匹配网页文档中的前 x 项结果

  6. keyword:选择具有指定属性的标签(标签可以不一样。)

    • .findAll(id='text') 等价于 .findAll('',{'id','text'})

    • 特殊点:

      • 因为 class 是 python 中受保护的关键字,也就是说 python 程序中不是使用class作为变量或参数名
      • Beautiful Soup 在 keyword 参数方面提供了以下解决方案:使用 class_
      • 例如:.findAll(class_='green')
# get_text() 获取指定标签的文本内容,注意括号不能少
bsObj.find('img',{'src': '……/1.jpg'}).parent.get_text()

导航树

将整个 Html 页面可以映射为一棵树。

# # 子标签处理
# children 方法:所有子标签
bsObj.find('table', {'id': 'giftList'}).children

# child 方法:单个子标签
bsObj.find('table', {'id': 'giftList'}).child

# # 后代标签
# descendant 方法:指定父标签下的所有级别的标签
bsObj.find('table', {'id': 'giftList'}).descendant

# # 兄弟标签处理(处理带有标题行的标签,相当方便)
# next_siblings 方法:后面的所有兄弟标签
bsObj.find('table', {'id': 'giftList'}).next_siblings

# next_sibling 方法:后面的单个兄弟标签
bsObj.find('table', {'id': 'giftList'}).next_sibling

# previous_siblings 方法:前面的所有兄弟标签
bsObj.find('table', {'id': 'giftList'}).previous_siblings

# previous_sibling 方法:前面的单个兄弟标签
bsObj.find('table', {'id': 'giftList'}).previous_sibling

# # 父标签处理
bsObj.find('img',{'src': '……/1.jpg'}).parent


你可能感兴趣的:(beautiful soup解析)