• 最新活动
  • 产品
    • 云计算

      云服务器 热销

      高速稳定高弹性的计算服务

      负载均衡

      高性能流量分发的负载均衡服务

      对象存储

      高可用、易扩展、低成本、一站式

      云数据库 MySQL

      稳定可靠、可弹性伸缩的数据方案

      云数据库 SQL Server

      安全运行、轻松管理的数据方案

    • 网站服务

      云虚拟主机 热销

      基于云计算的虚拟主机服务

      域名注册 火爆进行中

      提供主流域名注册服务

      CDN加速

      智能调度的内容分发服务

      短信服务

      提供专业、稳定、安全的云通信产品

      华为云代理

      华为云高折扣高返点

    • IDC服务

      服务器托管

      安全贴心高品质的托管服务

      裸金属服务器

      高性能安全隔离物理集群服务

      大带宽

      专有网络传输通道,完全隔离

      壹站邦分销系统

      一键部署、低成本、快速运营

      阿里云代理

      阿里云新购升级皆有返点

    • 安全与管理

      SSL证书 热销

      提供一站式的证书部署服务

      云监控

      精准灵活超便捷的资源预警服务

      网站备案

      免费、快速、便捷的备案服务

      DDOS高防 防不住包退

      一秒切换,无需更换IP,误伤率可降为0

  • 保障
    • 信任中心 >

      基础设施与网络

      服务保障能力

      数据安全

      合规资质

    • 数据中心 >

      中国内蒙数据中心

      中国大连数据中心

      中国深圳数据中心

      中国香港数据中心

    • VIP会员服务 >

      7*24小时服务支持

      0元快速备案

      100倍故障赔偿

      5天无理由退款

    • 防诈骗公益宣传 >

      行为识别

      安全防范

      典型案例

      法律法规

  • 解决方案
    • 行业解决方案

      网站解决方案

      游戏云解决方案

    •  

      金融云解决方案

    •  

      电商云解决方案

    •  

      移动云解决方案

  • 帮助中心
  • 腾讯云
    • 腾讯云

      腾讯云优惠 上云最佳选择

      腾讯云最新的促销打折、腾讯云优惠折扣

      腾讯云服务器

      腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务

      腾讯云数据库

      腾讯云数据库是腾讯云提供的高可靠、高可用、可弹性伸缩的云数据库服务产品的总称

      腾讯云轻量服务器

      腾讯云轻量应用服务器是一种易于使用和管理、适合承载轻量级业务负载的云服务器

      腾讯云GPU服务器

      AI加速 科学计算 实时渲染首选,让AI更有温度,体验身临其境

    • 腾讯云

      美颜特效

      腾讯云美颜特效SDK、API

      实时音视频

      腾讯云实时音视频SDK、API

      直播SDK

      腾讯云直播SDK、API

      即时通信IM

      腾讯云即时通信IM、聊天SDK、API

      人脸核身

      腾讯云人脸核身SDK、API

    • 腾讯云

    • 腾讯云

      腾讯云服务支持

      一站式服务,安心购,无忧用

    • 腾讯云

      服务支持

      一站式服务,安心购,无忧用

  • 关于我们
  • 备案
  • 控制台
-
  • 前往实名认证 >
  • 账户余额 -元
  • 产品管理 -
  • 未支付订单 -
  • 我的工单 -
  • 新消息 -
  • 退出账号
账号登录 快速注册

关于我们

质量为本、客户为根、勇于拼搏、务实创新

  • 公司简介
  • 新闻公告
  • 联系我们
  • 法律声明
  • 友情链接

新闻公告

  • 优惠活动
  • 公司公告
  • 腾讯云
< 返回新闻公共列表

爬虫系列(7)数据提取--Beautiful Soup。

发布时间:2022-06-08 22:45:03

1. Beautiful Soup的简介

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度

官网http://beautifulsoup.readthedocs.io/zh_CN/latest/

2. Beautiful Soup 安装

Beautiful Soup 3 目前已经停止开发,推荐在现在的项目中使用Beautiful Soup 4,不过它已经被移植到BS4了,也就是说导入时我们需要 import bs4

pip install beautifulsoup4
复制

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装

解析器

使用方法

优势

劣势

Python标准库

BeautifulSoup(markup, “html.parser”)

1. Python的内置标准库  2. 执行速度适中 3.文档容错能力强

Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差

lxml HTML 解析器

BeautifulSoup(markup, “lxml”)

1. 速度快 2.文档容错能力强

需要安装C语言库

lxml XML 解析器

BeautifulSoup(markup, [“lxml”, “xml”])  BeautifulSoup(markup, “xml”)

1. 速度快 2.唯一支持XML的解析器 3.需要安装C语言库


html5lib

BeautifulSoup(markup, “html5lib”)

1. 最好的容错性 2.以浏览器的方式解析文档 3.生成HTML5格式的文档 4.速度慢

不依赖外部扩展

3. 创建 Beautiful Soup 对象

from bs4 import BeautifulSoup

bs = BeautifulSoup(html,"lxml")
复制

4. 四大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

4.1 Tag 是什么?通俗点讲就是 HTML 中的一个个标签

例如:<div> <title>

使用方式:

#以以下代码为例子<title>百度</title><div class='info' float='left'>Welcome to Baidu</div><div class='info' float='right'>
    <span>Good Good Study</span>
    <a href='www.baidu.com'></a>
    <strong><!--没用--></strong></div>
复制
4.1.1 获取标签
#以lxml方式解析
soup = BeautifulSoup(info, 'lxml')print(soup.title)# <title>百度</title>
复制

注意

相同的标签只能获取第一个符合要求的标签

4.1.2 获取属性:
#获取所有属性print(soup.title.attrs)#class='info' float='left'#获取单个属性的值print(soup.div.get('class'))print(soup.div['class'])print(soup.a['href'])#info
复制

4.2 NavigableString 获取内容

print(soup.title.string)print(soup.title.text)#百度
复制

4.3 BeautifulSoup

BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,它支持 遍历文档树 和 搜索文档树 中描述的大部分的方法.

因为 BeautifulSoup 对象并不是真正的HTML或XML的tag,所以它没有name和attribute属性.但有时查看它的 .name 属性是很方便的,所以 BeautifulSoup 对象包含了一个值为 “[document]” 的特殊属性 .name

print(soup.name)print(soup.head.name)# [document]# head
复制

4.4 Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦

if type(soup.strong.string)==Comment:
    print(soup.strong.prettify())else:
    print(soup.strong.string)
复制

5 搜索文档树

Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find() 和 find_all() .其它方法的参数和用法类似,请同学们举一反三

5.1 过滤器

介绍 find_all() 方法前,先介绍一下过滤器的类型 ,这些过滤器贯穿整个搜索的API.过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中

5.1.1 字符串

最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中所有的<div>标签

#返回所有的div标签print(soup.find_all('div'))
复制

如果传入字节码参数,Beautiful Soup会当作UTF-8编码,可以传入一段Unicode 编码来避免Beautiful Soup解析编码出错

5.1.2 正则表达式

如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容

#返回所有的div标签print (soup.find_all(re.compile("^div")))
复制
5.1.3 列表

如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

#返回所有匹配到的span a标签print(soup.find_all(['span','a']))
复制
5.1.4 keyword

如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性

#返回id为welcom的标签print(soup.find_all(id='welcom'))
复制
5.1.4 True

True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

5.1.5 按CSS搜索

按照CSS类名搜索tag的功能非常实用,但标识CSS类名的关键字 class 在Python中是保留字,使用 class 做参数会导致语法错误.从Beautiful Soup的4.1.1版本开始,可以通过 class_ 参数搜索有指定CSS类名的tag

# 返回class等于info的divprint(soup.find_all('div',class_='info'))
复制

5.1.6 按属性的搜索

soup.find_all("div", attrs={"class": "info"})
复制

6. CSS选择器(扩展)

soup.select(参数)

表达式

说明

tag

选择指定标签

*

选择所有节点

#id

选择id为container的节点

.class

选取所有class包含container的节点

li a

选取所有li下的所有a节点

ul + p

(兄弟)选择ul后面的第一个p元素

div#id > ul

(父子)选取id为id的div的第一个ul子元素

table ~ div

选取与table相邻的所有div元素

a[title]

选取所有有title属性的a元素

a[class=”title”]

选取所有class属性为title值的a

a[href*=”sxt”]

选取所有href属性包含sxt的a元素

a[href^=”http”]

选取所有href属性值以http开头的a元素

a[href$=”.png”]

选取所有href属性值以.png结尾的a元素

input[type="redio"]:checked

选取选中的hobby的元素



本文链接:https://www.yzban.cn/news/content/123.html 复制本文链接 链接已复制
/template/Home/ShiwaiA1/PC/Static
注册即可领取40+款免费体验产品,为您提供优质的上云实践机会。企业用户最高可获得180天云服务器体验时长
开始体验
  • 5天内无理由退款
  • 免费备案
  • 1V1大客户服务
  • 7x24小时服务
  • 壹站邦

    • 官方公告
    • 荣誉资质
    • 服务协议
    • 法律声明
    • 关于我们
  • 行业解决方案

    • 游戏云解决方案
    • 金融解决方案
    • 电商解决方案
    • 网站解决方案
    • 移动云解决方案
  • 帮助与支持

    • 账户问题
    • 备案指南
    • 常见问题
    • 网站备案
    • 工单服务
  • 合作与生态

    • 合作伙伴
    • 壹站邦分销系统
    • 业界动态
    • 联系我们
    • 服务市场
  • 管理控制中心

    • 控制中心
    • 续费管理
    • 订单管理
    • 财务管理
    • 账户管理
服务热线:Array联系我们
简体中文
  • 简体中文
  • English
  • 繁体中文

深圳市壹站邦科技有限公司
旗下品牌:壹站邦
服务热线

18682484654 18129837002

热门产品

  • 域名注册
  • 云服务器
  • 云虚拟主机
  • 负载均衡
  • 网络加速
  • 云数据库
  • 对象存储
  • SSL证书
  • 裸金属

帮助中心

  • 文档中心
  • 账户问题
  • 备案指南
  • 控制台使用
  • 常见问题
  • 法律法规
  • WHOIS查询
  • 工单服务
  • 服务协议
Copyright © 2018-2021 yzban.cn. All Rights Reserved. 壹站邦科技 版权所有
粤公网安备 44030502007900号 工信部备案:粤ICP备2021101436号 统一社会信用代码:91440300MA5EDUAQ8N 授权代理商:华为技术有限公司
简体中文
  • 简体中文
  • English
  • 繁体中文
  • QQ咨询
    联系客服获取更多优惠
    • 921184386
    • 412442617
  • 微信咨询
    腾讯云优惠,阿里云折扣,腾讯云代理商,阿里云代理商,华为云代理商,腾讯云服务器,腾讯云代金券,阿里云代金券,腾讯云返点,阿里云返点,华为云返点,阿里云续费,腾讯云阿里云,腾讯服务器,ddos高防大客户报价,技术方案
  • 电话咨询
    请选择客服进行咨询
    • 18129837002
    • 18682484654
  • 备案
  • 工单
  • TOP