BeautifulSoup就是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据。官方解释如下:

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

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

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

所以说,利用它可以省去很多烦琐的提取工作,提高了解析效率。

一、模块安装

使用之前,需要确保已经安装好了BeautifulSoup和lxml模块。

pip install beautifulsoup4 lxml

二、解析器选择

Beautiful Soup在解析时实际上依赖解析器,它除了支持Python标准库中的HTML解析器外,还支持一些第三方解析器(比如lxml)。下表为BeautifulSoup支持的解析器:

解析器

使用方法

优势

劣势

Python标准库

BeautifulSoup(markup, "html.parser")

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

Python 2.7.3及Python 3.2.2之前的版本文档容错能力差

lxml HTML解析器

BeautifulSoup(markup, "lxml")

速度快、文档容错能力强

需要安装C语言库

lxml XML解析器

BeautifulSoup(markup, "xml")

速度快、唯一支持XML的解析器

需要安装C语言库

html5lib

BeautifulSoup(markup, "html5lib")

最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档

速度慢、不依赖外部扩展

通过以上对比可以看出,lxml解析器有解析HTML和XML的功能,而且速度快,容错能力强,所以推荐使用它。

如果使用lxml,那么在初始化Beautiful Soup时,可以把第二个参数改为lxml即可:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello</p>', 'lxml')
print(soup.p.string)

三、基本用法

from bs4 import BeautifulSoup
import requests, re req_obj = requests.get('https://www.baidu.com')
soup = BeautifulSoup(req_obj.text, 'lxml') '''标签查找'''
print(soup.title) # 只是查找出第一个
print(soup.find('title')) # 效果和上面一样
print(soup.find_all('div')) # 查出所有的div标签 '''获取标签里的属性'''
tag = soup.div
print(tag['class']) # 多属性的话,会返回一个列表
print(tag['id']) # 查找标签的id属性
print(tag.attrs) # 查找标签所有的属性,返回一个字典(属性名:属性值) '''标签包的字符串'''
tag = soup.title
print(tag.string) # 获取标签里的字符串
tag.string.replace_with("哈哈") # 字符串不能直接编辑,可以替换 '''子节点的操作'''
tag = soup.head
print(tag.title) # 获取head标签后再获取它包含的子标签 '''contents 和 .children'''
tag = soup.body
print(tag.contents) # 将标签的子节点以列表返回
print([child for child in tag.children]) # 输出和上面一样 '''descendants'''
tag = soup.body
[print(child_tag) for child_tag in tag.descendants] # 获取所有子节点和子子节点 '''strings和.stripped_strings'''
tag = soup.body
[print(str) for str in tag.strings] # 输出所有所有文本内容
[print(str) for str in tag.stripped_strings] # 输出所有所有文本内容,去除空格或空行 '''.parent和.parents'''
tag = soup.title
print(tag.parent) # 输出便签的父标签
[print(parent) for parent in tag.parents] # 输出所有的父标签 '''.next_siblings 和 .previous_siblings
查出所有的兄弟节点
''' '''.next_element 和 .previous_element
下一个兄弟节点
''' '''find_all的keyword 参数'''
soup.find_all(id='link2') # 查找所有包含 id 属性的标签
soup.find_all(href=re.compile("elsie")) # href 参数,Beautiful Soup会搜索每个标签的href属性:
soup.find_all(id=True) # 找出所有的有id属性的标签
soup.find_all(href=re.compile("elsie"), id='link1') # 也可以组合查找
soup.find_all(attrs={"属性名": "属性值"}) # 也可以通过字典的方式查找

更多详细使用可参考:https://cuiqingcai.com/5548.html

python3 BeautifulSoup模块使用的更多相关文章

  1. python3 BeautifulSoup模块

    一.安装下载: 1.安装: pip install beautifulsoup4 2.可选择安装解析器:pip install lxmlpip install html5lib 3.解析器比较: 解析 ...

  2. Python 爬虫三 beautifulsoup模块

    beautifulsoup模块 BeautifulSoup模块 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查 ...

  3. 03 解析库之Beautifulsoup模块

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

  4. bs4——BeautifulSoup模块:解析网页

    解析由requests模块请求到的网页 import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/ ...

  5. Beautifulsoup模块基础详解

    Beautifulsoup模块 官方中文文档 Beautifulsoup官方中文文档 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的 ...

  6. Beautifulsoup模块基础用法详解

    目录 Beautifulsoup模块 官方中文文档 介绍 基本使用 遍历文档树 搜索文档树 五种过滤器 **find_all( name , attrs , recursive , text , ** ...

  7. BeautifulSoup模块学习文档

    一.BeautifulSoup简介 1.BeautifulSoup模块 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档 ...

  8. Python爬虫之Beautifulsoup模块的使用

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

  9. python学习之BeautifulSoup模块爬图

    BeautifulSoup模块爬图学习HTML文本解析标签定位网上教程多是爬mzitu,此网站反爬限制多了.随意找了个网址,解析速度有些慢.脚本流程:首页获取总页数-->拼接每页URL--> ...

随机推荐

  1. HDU 2588 GCD 【Euler + 暴力技巧】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2588 GCD Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  2. thinkphp 和 laravel使用sql语句操作db和源码浅析

    thinkphp 和 laravel是phper开发中用的比较多的两个框架,无所谓好坏,看个人习惯及喜爱! 前言对于一个PHP应用,可能最多的就是操作数据,以致于初学者有时只把php当做数据库增删查改 ...

  3. Fine Tuning

    (转载自:WikiPedia) Fine tuning is a process to take a network model that has already been trained for a ...

  4. Kindeditor图片上传Controller

    asp.net MVC Kindeditor 图片.文件上传所用的Controller [HttpPost, AllowAnonymous] public ActionResult UploadIma ...

  5. sharepoint2016安装OOS,OOS场负载均衡

    Office Online Server is the successor to Office Web Apps Server. It may be connected to SharePoint, ...

  6. asp.net mvc5 step by step(三)—— Entity Framework Database First

    一.先建数据库. 打开,SQL Server Management 新建数据库Employee 并新建表 /****** Object: Table [dbo].[t_Employee] Script ...

  7. chromium之scoped_ptr

    看看怎么使用 // Scopers help you manage ownership of a pointer, helping you easily manage the // a pointer ...

  8. ubuntu18.04错误配置变量环境导致无法进入系统

    1.问题描述 错误配置环境变量(直接在/etc/profile文件末尾添加了export xxx),关机后一直在登录界面循环无法进入系统. ###环境变量的添加是在原有变量之后以冒号(:)分隔加入,并 ...

  9. SQL Server 2012 - 动态SQL查询

    动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...

  10. mybatis报错:未找到参数导致绑定异常

    问题: 在映射文件中使用parameterMap元素时出现以下异常: org.mybatis.spring.MyBatisSystemException: nested exception is or ...