在我们学会了BeautifulSoup库的用法后,我们就可以使用这个库对HTML进行解析,从网页中提取我们需要的内容。

在BeautifulSoup 文档里,find()、find_all()两者的定义如下:

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

  find(标签,属性,递归,文本,关键词)

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

  find_all(标签、属性、递归、文本、限制、关键词)

find()与find_all()的区别,find()只会取符合要求的第一个元素,find_all()会根据范围限制参数limit限定的范围取元素(默认不设置代表取所有符合要求的元素,find 等价于 find_all的 limit =1 时的情形),接下来将对每个参数一一介绍。

另外,find_all()会将所有满足条件的值取出,组成一个list

下面我们就一一介绍函数中各个参数的作用:

一、标签tag

标签参数 tag 可以传一个标签的名称或多个标签名称组成的set做标签参数。例如,下面的代码将返回一个包含 HTML 文档中所有链接标签的列表: find_all("a")

下面以“百度一下”网页举例,如下图,现在要将百度页面上的所有的链接取出,观察网页源代码可以发现,标题对应的tag 是a,则soup.find_all('a')

代码如下:

from bs4 import BeautifulSoup
import requests url = 'https://www.baidu.com/'
urlhtml = requests.get(url)
urlhtml.encoding = 'utf-8'
soup = BeautifulSoup(urlhtml.text, 'lxml') n = soup.find_all('a')
print(n)

结果如下,我们就找出了全部的<a>标签。

上面例子只是一个标签的情况,如果多个标签写法相同,只是注意要将所有的标签写在一个set里面

二、属性attributes

属性参数 attributes 是用字典封装一个标签的若干属性和对应的属性值。如,下面这个函数会返回 HTML 文档里“mnav”的a标签。find_all("a", {"class":{"mnav"}})

如下图,现在要获取网页中的“新闻”等信息,通过观察可知,它们的属性为"mnav",标签为a。

则我们可以编写代码:

from bs4 import BeautifulSoup
import requests url = 'https://www.baidu.com/'
urlhtml = requests.get(url)
urlhtml.encoding = 'utf-8'
soup = BeautifulSoup(urlhtml.text, 'lxml')
n = soup.find_all('a', {'class': 'mnav'})
print(n)

运行结果如下,可以看出输出的链接的属性全部为“mnav”。

三、递归recursive

递归参数 recursive 是一个布尔变量。你想抓取 HTML 文档标签结构里多少层的信息?如recursive 设置为 True, find_all()就会根据你的要求去查找标签参数的所有子标签,以及标签的子标签。如果 recursive 设置为 False, find_all()就只查找文档的一级标签。 find_all默认是支持递归查找的(recursive 默认值是 True),这里是很少使用的,所以我在这儿就不在举例了。

四、文本text

文本参数 text 有点不同,它是用标签的文本内容去匹配,而不是用标签的属性。

我们再以“百度一下”的网页举例吧,在这个网页中,我们查找一下“新闻”在该网页中出现了多少个(其实只出现了一个)

from bs4 import BeautifulSoup
import requests url = 'https://www.baidu.com/'
urlhtml = requests.get(url)
urlhtml.encoding = 'utf-8'
soup = BeautifulSoup(urlhtml.text, 'lxml') n = soup.find_all(text='新闻')
print(n)

结果如下:

需要特别注意一点,这里查找是用的是完全匹配原则,意思是如果这里你用了find_all(text=“新”),得到的结果会是0个

五、关键词keywords

关键词参数 keyword,自己选择那些具有指定属性的标签

上面网页的内容,现在要取id='wrapper'的内容,则

from bs4 import BeautifulSoup
import requests url = 'https://www.baidu.com/'
urlhtml = requests.get(url)
urlhtml.encoding = 'utf-8'
soup = BeautifulSoup(urlhtml.text, 'lxml') n = soup.find_all(id='wrapper')
print(n)

结果如下,也就是选中的<div>中的内容

注意:如果是class、id等参数,用keywords 或者attributes用法一样,如果是一些其他参数,则用keywords

find()和find_all()的具体使用的更多相关文章

  1. python3爬虫(find_all用法等)

    #read1.html文件 # <html><head><title>The Dormouse's story</title></head> ...

  2. BeautifulSoup中的find,find_all

    1.一般来说,为了找到BeautifulSoup对象内任何第一个标签入口,使用find()方法. 以上代码是一个生态金字塔的简单展示,为了找到第一生产者,第一消费者或第二消费者,可以使用Beautif ...

  3. BeautifulSoup4----利用find_all和get方法来获取信息

    中文文档 官方教学网页源码: <html> <head> <title>Page title</title> </head> <bod ...

  4. find 和 find_all 用法

    soup = BeautifulSoup(requests.get(url).text, 'html.parser') soup.find('span', class_='item_hot_topic ...

  5. python爬虫(1)——BeautifulSoup库函数find_all() (转)

    原文地址:http://blog.csdn.net/depers15/article/details/51934210 python--BeautifulSoup库函数find_all() 一.语法介 ...

  6. python3爬虫03(find_all用法等)

    #read1.html文件# <html><head><title>The Dormouse's story</title></head># ...

  7. python 学习之FAQ:find 与 find_all 使用

      FAQ记录   1. 错误源码 错误源码如下 def fillUnivList(_html,_ulist): soup =BeautifulSoup(_html,'html.parser') fo ...

  8. BS4(BeautifulSoup4)的使用--find_all()篇

    可以直接参考 BS4文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-all 注意的是: 1.有些 ...

  9. find_all的用法 Python(bs4,BeautifulSoup)

    find_all()简单说明: find_all() find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件 用法一: rs=soup.find_all('a') 将返 ...

随机推荐

  1. Python-数据类型内置方法(1)

    目录 数字类型内置方法 整形(int) 浮点型(float) 字符串类型内置方法 优先掌握 需要掌握 了解 列表类型内置方法 优先掌握 需要掌握 数字类型内置方法 整形(int) 作用:年龄 定义:x ...

  2. iOS之String动态书写

    /** String动画书写出来 @param string 要写的字 @param view 父视图 @param ui_font 字体大小 @param color 字体颜色 */ - (void ...

  3. div 和 span 标记

    div 一般和 css 配合使用  <div>是一个块元素 span  也是和 css 配合使用 <span>是一个行内元素 标记嵌套是  一般是块元素嵌套行内元素 1 块元素 ...

  4. 解决MySQL登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)问题

    问题描述 今天在MAC上安装完MySQL后,MYSQL默认给分配了一个默认密码,但当自己在终端上使用默认密码登录的时候,总会提示一个授权失败的错误:Access denied for user ‘ro ...

  5. 黑裙辉DS918+安装错误码21,安装教程 重装需要重新制作启动盘

    不然报错误码21    

  6. java基础之Calender类

    Calendar: Calendar类概述 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并 ...

  7. Java超简明入门学习笔记(二)

    Java编程思想第4版学习笔记(二) 第三章 操作符 & 第四章 控制执行流程(流程控制语句)         第三章和第四章的内容主要是讲操作符和流程控制语句,Java的大多数操作符和流程控 ...

  8. 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整

    0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...

  9. 关于LZO无法平台上压缩,但是数据需要使用平台压缩的问题解决

    我们做hive查询时候经常会出现出数过慢的问题,于是采用了LZO压缩,再在压缩块上做索引的方式去解决这个问题,但是也引入了新的问题点 lzo本身的压缩功能只能在linux上压缩再上传到HDFS平台,供 ...

  10. 备份和恢复MySQL数据库

    一.备份 1) 备份表mysqldump -uroot -p 库名 表1 > e:\backup.sqlmysqldump -uroot -p 库名 表1 表2 表3 > e:\backu ...