博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3 BeautifulSoup模块使用
阅读量:5360 次
发布时间:2019-06-15

本文共 2629 字,大约阅读时间需要 8 分钟。

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 BeautifulSoupsoup = BeautifulSoup('

Hello

', 'lxml')print(soup.p.string)

三、基本用法

from bs4 import BeautifulSoupimport requests, rereq_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.divprint(tag['class'])  # 多属性的话,会返回一个列表print(tag['id'])  # 查找标签的id属性print(tag.attrs)  # 查找标签所有的属性,返回一个字典(属性名:属性值)'''标签包的字符串'''tag = soup.titleprint(tag.string)  # 获取标签里的字符串tag.string.replace_with("哈哈")  # 字符串不能直接编辑,可以替换'''子节点的操作'''tag = soup.headprint(tag.title)  # 获取head标签后再获取它包含的子标签'''contents 和 .children'''tag = soup.bodyprint(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.titleprint(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://www.cnblogs.com/Jimc/p/10307947.html

你可能感兴趣的文章
NPOI 单元格格式集合
查看>>
SQL Server如何进行时间比较的代码实例
查看>>
开发过程中遇到的小问题
查看>>
html+css学习笔记:Sass语法学习
查看>>
第二讲 硬件I/O操作
查看>>
Python3 timeit的用法
查看>>
前端应该会的基础PS技术
查看>>
Message,MessageQueue,Looper,Handler详解
查看>>
回答2
查看>>
自定义控件-滑动条SeekBar
查看>>
error C2275: “XXX”: 将此类型用作表达式非法
查看>>
jquery.cookie.js 用法 jquery获取当前cookie
查看>>
常用的sublime text 3插件(很爽哦)
查看>>
浏览器渲染原理
查看>>
RabbitMQ框架构建系列(四)——Net实现RabbitMQ之Consumer
查看>>
DBCC CHECKIDENT 重置数据库标识列从某一数值开始
查看>>
python之scrapy爬取某集团招聘信息
查看>>
使用picker底部滑动选择数据(1列,2列)
查看>>
ACM-ICPC北京站总结
查看>>
day 13 函数装饰器
查看>>