python爬虫——BeautifulSoup库函数find_all()
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()相关推荐
- Python爬虫-BeautifulSoup
Python爬虫-BeautifulSoup Python爬虫-BeautifulSoup "美丽汤"的爱恨 使用 爱丽丝文档示例 标签 遍历 find(),findAll() 综 ...
- [python爬虫] BeautifulSoup设置Cookie解决网站拦截并爬取蚂蚁短租
我们在编写Python爬虫时,有时会遇到网站拒绝访问等反爬手段,比如这么我们想爬取蚂蚁短租数据,它则会提示"当前访问疑似黑客攻击,已被网站管理员设置为拦截"提示,如下图所示.此时我 ...
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下: 1.爬取内容总为空,其原因 ...
- [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...
- python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...
Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到 ...
- [python爬虫] BeautifulSoup爬取+CSV存储贵州农产品数据
在学习使用正则表达式.BeautifulSoup技术或Selenium技术爬取网络数据过程中,通常会将爬取的数据存储至TXT文件中,前面也讲述过海量数据存储至本地MySQL数据库中,这里主要补充Bea ...
- python爬虫beautifulsoup实例-Python爬虫学习(二)使用Beautiful Soup库
(一)使用Beautiful Soup库(默认将HTML转换为utf-8编码) 1,安装Beautiful Soup库:pip install beautifulsoup4 2,简单使用: impor ...
- python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践
前言 前面安装了BeautifulSoup库,现在就来实现一下吧. 目录 一.Urllib库的使用 二.BeautifulSoup的使用 三. 一个示例 ----------------------- ...
- Python笔记-BeautifulSoup中find_all的使用及str中trim()
实例是这样的: 将titile和Cost提取,出来 代码如下: from urllib.request import urlopen from bs4 import BeautifulSoupif _ ...
最新文章
- 月英爱耀承(帮别人名字作诗)
- 批处理命令 / cd
- 特征向量按照特征值大小进行排序
- 口琴膜片什么作用_思域发动机舱里的这个东西是什么东东,它究竟有什么作用呢?...
- day_01 解析简单的程序
- 2021某宝上的千月五级分润源码影视小说源码
- vue获取上传进度_vue通过input选取apk文件上传,显示进度条
- uva 1378 - A Funny Stone Game sg博弈
- 家里的电脑频繁断网怎么回事
- webbench 压力测试软件
- 【转】8段数码管引脚图,8段数码管动态显示详解
- python学习笔记(八)传递任意数量的实参
- n918st能刷Android5吗?,中兴 N918ST中文Recovery刷机教程
- 关于浏览器被hao123劫持
- 威漫哨兵机器人_漫威哨兵机器人真的可以模仿所有超能力吗?
- 海蜘蛛软路由linux安装教程,软路由安装设置教程【详细步骤】-太平洋IT百科
- 300M宽带网速只有16M?下载速度达到多少才算正常?
- java线程池介绍(一)
- MCAD/MCSD课程选择对比
- YOLO系列目标检测算法-YOLOv7