BeatifulSoup

(1)介绍

  • Beautiful Soup是Python库,用于解析HTML和XML文档。它提供简单而强大的工具,帮助用户从网页中提取数据。通过查找元素、遍历文档树和处理编码问题,它简化了数据提取过程。适用于网页抓取、数据挖掘和分析等应用场景。
pip install beautifulsoup4
from bs4 import BeautifulSoup

(2)解析器

  • 内置解析器html.parser
soup = BeautifulSoup('页面源码',html.parser)
  • 第三方解析器lxml
soup = BeautifulSoup('页面源码','lxml')
  • html5lib
pip install html5lib
soup = BeautifulSoup('页面源码','html5lib')

(3)使用

(1)生成soup对象

  • 打开本地文件
soup = BeautifulSoup(open('index.html'),'lxml')
  • 直接把页面源码放进去
soup = BeautifulSoup('<html>data</html>','lxml')
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent url = 'http://www.baidu.com' headers = {
'User-Agent': UserAgent().random
}
res = requests.get(url=url,headers=headers) soup = BeautifulSoup(res.text,'lxml')
print(soup)

(4)BeautifulSoup四个对象

(1)BeautifulSoup对象

  • 代表整个解析后的HTML文档,是最顶层的对象。
  • 它包含了整个文档的全部内容,并提供了操作HTML文档的方法和属性。
soup = BeautifulSoup(res.text, 'lxml')

(2)Tag对象

  • 表示HTML中的标签,如<p>、<a>等。
  • Tag对象包含了标签的名称和对应的属性,并可以通过Tag对象来获取标签内的内容或进行进一步的操作。
  • 可以通过传递HTML文档给BeautifulSoup类初始化的方式创建Tag对象。

(1)查找tag对象

  • 通过soup.tag名获取到指定标签对象
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p> <p class="story">...</p>
""" soup = BeautifulSoup(html_doc, 'lxml') print(soup.head, type(soup.head))
# <head><title>The Dormouse's story</title></head> <class 'bs4.element.Tag'> print(soup.title, type(soup.title))
# <title>The Dormouse's story</title> <class 'bs4.element.Tag'> print(soup.a, type(soup.a))
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> <class 'bs4.element.Tag'> print(soup.p.b)
# <b>The Dormouse's story</b>

(2)查找tag对象的标签名和属性

  • 通过soup.tag名.属性名获取到指定标签属性名对应的属性值
print(soup.a.name)  # a

print(soup.p.b.name)  # b

print(soup.a["href"])  # http://example.com/elsie

print(soup.a.attrs)  # {'href': 'http://example.com/elsie', 'class': ['sister'], 'id': 'link1'}

(3)返回多值的属性

print(soup.a["class"])  # ['sister']

(4)修改tag的属性

soup.a["class"] = ["sister c1"]
# 删除第一个a标签的id属性值
del soup.a["id"]

(5)获取标签对象的文本内容

print(soup.p.string) # 直接拿文本内容

# 拿到一个生成器对象, 取到p下所有的文本内容
print(soup.p.strings)
# <generator object Tag._all_strings at 0x000001AEFAEC2FF0> for i in soup.p.strings:
print(i)
# The Dormouse's story

总结:

三种拿文本的方式

​ string

​ text

​ get_text()

(5)搜索文档树语法

(1)find_all 查找所有

  • 在当前页面文档中查找所有符合条件的标签
soup.find_all(name='a')
soup.find_all(name=['a', 'p'])
soup.find_all(True) # 匹配所有的tag,不会返回字符串节点 # 返回所有 href 属性等于 "http://example.com/tillie" 的标签。
print(soup.find_all(href="http://example.com/tillie")) # 返回所有包含文本 "Elsie" 的标签
print(soup.find_all(text="Elsie")) # 返回所有包含文本 "Tillie"、"Elsie" 或 "Lacie" 的标签。
print(soup.find_all(text=["Tillie", "Elsie", "Lacie"])) # 返回所有a标签,限制2个
print(soup.find_all("a", limit=2)) # 只会查找当前soup文档的直接子元素中的 <div> 标签。
print(soup.find_all("div", recursive=False))

(2)find 查找单个

  • find() 方法用于在文档中查找符合条件的tag,并返回第一个匹配的结果。
  • 它可以通过指定name、attrs、recursive和string等参数来过滤查找结果。

(6)select语法

  • Beautiful Soup库中的 select() 方法是用于通过 CSS 选择器来选择元素的方法。它返回匹配选择器的所有元素列表。

    1. 语法

      select(css_selector)
      • css_selector: 要使用的CSS选择器字符串。
    2. 选择器

      • 通过标签名选择:例如,'p' 选择所有 <p> 标签。
      • 通过类名选择:例如,'.classname' 选择所有带有指定类名的元素。
      • 通过ID选择:例如,'#idname' 选择具有指定ID的元素。
      • 通过属性选择:例如,'[attribute=value]' 选择具有指定属性值的元素。
      • 组合选择器:可以组合多个选择器,例如,'p.title' 选择所有带有 class="title"<p> 元素。
    3. 返回值

      • select() 方法返回一个列表,包含匹配选择器的所有元素。
    4. 示例

      from bs4 import BeautifulSoup
      
      # HTML文档
      html_doc = """
      <html>
      <head>
      <title>Sample Page</title>
      </head>
      <body>
      <div id="content">
      <p class="para1">Paragraph 1</p>
      <p class="para2">Paragraph 2</p>
      <p class="para1">Paragraph 3</p>
      </div>
      </body>
      </html>
      """ # 创建BeautifulSoup对象
      soup = BeautifulSoup(html_doc, 'html.parser') # 选择所有 <p> 标签
      paragraphs = soup.select('p')
      print(paragraphs) # 选择类为 "para1" 的 <p> 标签
      para1 = soup.select('.para1')
      print(para1) # 选择ID为 "content" 的 <div> 标签
      content_div = soup.select('#content')
      print(content_div)

      输出:

      [<p class="para1">Paragraph 1</p>, <p class="para2">Paragraph 2</p>, <p class="para1">Paragraph 3</p>]
      [<p class="para1">Paragraph 1</p>, <p class="para1">Paragraph 3</p>]
      [<div id="content"><p class="para1">Paragraph 1</p><p class="para2">Paragraph 2</p><p class="para1">Paragraph 3</p></div>]

BeatifulSoup的更多相关文章

  1. 爬虫 BeatifulSoup 模块

    BeatifulSoup 模块 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 安装 pip install beautifulsoup4  解析器下载 ...

  2. 爬虫基础以及 re,BeatifulSoup,requests模块使用

    爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...

  3. linux上安装BeatifulSoup(第三方python库)

    1. 什么是beatifulsoup? beatifulsoup官网http://www.crummy.com/software/BeautifulSoup/ BeatifulSoup是用Python ...

  4. python 简单爬虫(beatifulsoup)

    ---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或 ...

  5. 我的第一个py爬虫-小白(beatifulsoup)

    一.基本上所有的python第一步都是安装.安装 我用到的第三方安装包(beatifulsoup4.re.requests).还要安装lxml 二.找个http开头的网址我找的是url="h ...

  6. BeatifulSoup文档地址

    http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

  7. BeatifulSoup模块

    一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  8. 爬虫(七):BeatifulSoup模块

    1. Beautiful Soup介绍 Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.能将即将要进行解析的源码加载到bs对象,调用bs对象中相关的方法或属性进 ...

  9. BeatifulSoup在测试工作中的应用

    近期要做一个项目,重复性劳动比较多,小伙伴建议我用Jsoup,但是由于项目紧急,我直接选择了BeautifulSoup,关键原因是我Java语言不如Python掌握的熟练啊!所以,查了一圈它的中文文档 ...

  10. BeautifulSoup

    参考:http://www.freebuf.com/news/special/96763.html 相关资料:http://www.jb51.net/article/65287.htm 1.Pytho ...

随机推荐

  1. MTR工具使用说明与结果分析

    免责声明: 本文档可能包含第三方产品信息,该信息仅供参考.阿里云对第三方产品的性能.可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺. 概述 当客户端访问目标服务器或负载均衡,使用pin ...

  2. Linux-两台Linux服务器间设置共享文件夹(NFS服务器)

    一.环境信息服务器1:192.168.120.141        文件夹:/opt服务器2:192.168.120.142        文件夹:/opt将服务器1的/opt文件夹共享到服务器2的/ ...

  3. Math类、System类--java进阶day05

    1.Math类 Math类里所有方法都被static修饰,说明它是一个工具类,不需要创建对象,直接类名调用 2.Math方法展示 . 3.System类 SYstem方法展示 1.currentTim ...

  4. k8s部署dify详细过程

    一.概述 dify官方提供的安装方式是docker-compose方式部署的,单机运行. 但是在企业生产环境,单机没法提供冗余,一旦故障,就很麻烦了. 如果有大量的APP用户,那么单机承受不住这么多并 ...

  5. Git 版本管理,与 SVN区别对比

    一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...

  6. Java并发并发编程实战-并发容器和同步工具类

    并发容器 ConcurrentHashMap 设计原理 分段锁(JDK 7) :将数据分成多个段(Segment),每个段独立加锁,不同段的操作可并行执行. CAS + synchronized(JD ...

  7. 基于源码分析 HikariCP 常见参数的具体含义

    HikariCP 是目前风头最劲的 JDBC 连接池,号称性能最佳,SpringBoot 2.0 也将 HikariCP 作为默认的数据库连接池. 要想用好 HikariCP,理解常见参数的具体含义至 ...

  8. js录制系统/麦克风声音(基于electron)

    最近想用electron写一个和音视频相关的软件,尽管在写之前都想好了要用哪些技术,但依然写得很艰难,今天对相关知识的个人理解做个记录和整理. 时隔半年,最近发现网上有大神造好的轮子,而且功能强大:h ...

  9. .net6 中间件

    参照资料: ASP.NET Core 中间件 | Microsoft Learn ASP.NET Core端点路由 作用原理 - 知乎 (zhihu.com) 一.概念 中间件是一种装配到应用管道以处 ...

  10. 中国科学院计算所:从 NFS 到 JuiceFS,大模型训推平台存储演进之路

    中科院计算所在建设大模型训练与推理平台过程中,模型规模与数据集数量呈爆发式增长.最初采用简单的裸机存储方案,但很快面临数据孤岛.重复冗余.管理混乱和资源利用不均等问题,于是升级到了 NFS 系统.然而 ...