python——BeautifulSoup库函数find_all()

一、语法介绍

find_all( name , attrs , recursive , string , **kwargs ) 
find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件

二、参数及用法介绍

1、name参数

这是最简单而直接的一种办法了,我么可以通过html标签名来索引;

sb = soup.find_all('img')
  • 1

注意: 搜索 name 参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True ;

2、keyword参数

所谓关键字参数其实就是通过一个html标签的id、href(这个主要指的是a标签的 )和title,我测试了class,这个方法好像不行,不过没有关系,下面我会谈到这个点的!

soup.find_all(href=re.compile("elsie"))
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
  • 1
  • 2
soup.find_all(id='link2')
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
  • 1
  • 2

这里的true指的就是选中所有有id这个属性的标签;

soup.find_all(id=True)
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
  • 1
  • 2
  • 3
  • 4

当然牙可以设置多个筛选的属性;

soup.find_all(href=re.compile("elsie"), id='link1')
# [<a class="sister" href="http://example.com/elsie" id="link1">three</a>]
  • 1
  • 2

还有有些属性在搜索时就不能使用,就比如HTML5中的 data-* 属性,咋办?

data_soup = BeautifulSoup('<div data-foo="value">foo!</div>')
data_soup.find_all(data-foo="value")
# SyntaxError: keyword can't be an expression
  • 1
  • 2
  • 3

但是可以通过 find_all() 方法的 attrs 参数定义一个字典参数来搜索包含特殊属性的tag:

data_soup.find_all(attrs={"data-foo": "value"})
# [<div data-foo="value">foo!</div>]
  • 1
  • 2

虽然我们不能像id他们那样使用,因为class在python中是保留字(保留字(reserved word),指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。 
),所以呢,直接使用是回报错的,所以class_应运而生; 
所以呢,顺便上一张图片,让我们看一看python都有哪些保留字: 

通过标签名和属性名一起用:

soup.find_all("a", class_="sister")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
  • 1
  • 2
  • 3
  • 4

除此之外呢,还有就是class_ 参数同样接受不同类型的 过滤器 ,字符串,正则表达式,方法或 True :当然,上面的属性也可以和标签名结合起来使用;

soup.find_all(class_=re.compile("itl"))
# [<p class="title"><b>The Dormouse's story</b></p>]def has_six_characters(css_class):return css_class is not None and len(css_class) == 6soup.find_all(class_=has_six_characters)
#这里的这个函数,其实就是一个布尔值True;
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

sting参数

通过 string 参数可以搜搜文档中的字符串内容.与 name 参数的可选值一样, string 参数接受 字符串 , 正则表达式 , 列表, True;

soup.find_all("a", string="Elsie")
# [<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>]
  • 1
  • 2

limit参数

这个参数其实就是控制我们获取数据的数量,效果和SQL语句中的limit一样;

soup.find_all("a", limit=2)
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
  • 1
  • 2
  • 3

recursive参数

调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False; 
Html

<html><head><title>The Dormouse's story</title></head>
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

python

soup.html.find_all("title")
# [<title>The Dormouse's story</title>]soup.html.find_all("title", recursive=False)
# []
  • 1
  • 2
  • 3
  • 4
  • 5

所以他只获取自己的直接子节点,也就是他自己,这个标签自己就是他的直接子节点;

Beautiful Soup 提供了多种DOM树搜索方法. 这些方法都使用了类似的参数定义. 比如这些方法: find_all(): name, attrs, text, limit. 但是只有 find_all() 和 find() 支持 recursive 参数.

python爬虫——BeautifulSoup库函数find_all()相关推荐

  1. Python爬虫-BeautifulSoup

    Python爬虫-BeautifulSoup Python爬虫-BeautifulSoup "美丽汤"的爱恨 使用 爱丽丝文档示例 标签 遍历 find(),findAll() 综 ...

  2. [python爬虫] BeautifulSoup设置Cookie解决网站拦截并爬取蚂蚁短租

    我们在编写Python爬虫时,有时会遇到网站拒绝访问等反爬手段,比如这么我们想爬取蚂蚁短租数据,它则会提示"当前访问疑似黑客攻击,已被网站管理员设置为拦截"提示,如下图所示.此时我 ...

  3. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试

    作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下:   1.爬取内容总为空,其原因 ...

  4. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  5. python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...

    Python爬虫包 BeautifulSoup  递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到 ...

  6. [python爬虫] BeautifulSoup爬取+CSV存储贵州农产品数据

    在学习使用正则表达式.BeautifulSoup技术或Selenium技术爬取网络数据过程中,通常会将爬取的数据存储至TXT文件中,前面也讲述过海量数据存储至本地MySQL数据库中,这里主要补充Bea ...

  7. python爬虫beautifulsoup实例-Python爬虫学习(二)使用Beautiful Soup库

    (一)使用Beautiful Soup库(默认将HTML转换为utf-8编码) 1,安装Beautiful Soup库:pip install beautifulsoup4 2,简单使用: impor ...

  8. python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践

    前言 前面安装了BeautifulSoup库,现在就来实现一下吧. 目录 一.Urllib库的使用 二.BeautifulSoup的使用 三. 一个示例 ----------------------- ...

  9. Python笔记-BeautifulSoup中find_all的使用及str中trim()

    实例是这样的: 将titile和Cost提取,出来 代码如下: from urllib.request import urlopen from bs4 import BeautifulSoupif _ ...

最新文章

  1. 月英爱耀承(帮别人名字作诗)
  2. 批处理命令 / cd
  3. 特征向量按照特征值大小进行排序
  4. 口琴膜片什么作用_思域发动机舱里的这个东西是什么东东,它究竟有什么作用呢?...
  5. day_01 解析简单的程序
  6. 2021某宝上的千月五级分润源码影视小说源码
  7. vue获取上传进度_vue通过input选取apk文件上传,显示进度条
  8. uva 1378 - A Funny Stone Game sg博弈
  9. 家里的电脑频繁断网怎么回事
  10. webbench 压力测试软件
  11. 【转】8段数码管引脚图,8段数码管动态显示详解
  12. python学习笔记(八)传递任意数量的实参
  13. n918st能刷Android5吗?,中兴 N918ST中文Recovery刷机教程
  14. 关于浏览器被hao123劫持
  15. 威漫哨兵机器人_漫威哨兵机器人真的可以模仿所有超能力吗?
  16. 海蜘蛛软路由linux安装教程,软路由安装设置教程【详细步骤】-太平洋IT百科
  17. 300M宽带网速只有16M?下载速度达到多少才算正常?
  18. java线程池介绍(一)
  19. MCAD/MCSD课程选择对比
  20. YOLO系列目标检测算法-YOLOv7

热门文章

  1. 如何加速 LaTeX 编译
  2. linux使用招商银行网上银行
  3. vue学习 (一 模板语法)
  4. AspectJ 使用介绍
  5. python与ruby
  6. 计算机raid基础知识,主板知识详解:板载 RAID
  7. Android蓝牙开发的一些经验
  8. Ipxzerg时代的zvt两族战略之虫族崛起篇
  9. 【python】 pypinyin 拼音库
  10. VM VirtualBox虚拟机添加虚拟硬盘