题图:
MiguelMateo系列文章的第3篇介绍了网络请求库神器Requests,请求把数据返回来之后就要提取目标数据,不同的网站返回的内容通常有多种不同的格式,一种是json格式,这类数据对开发者来说最友好。另一种XML格式的,还有一种最常见格式的是HTML文档,今天就来讲讲如何从HTML中提取出感兴趣的数据
直接字符串处理?自己写个HTML解析器来解析吗?还是用正则表达式?这些都不是最好的办法,好在,Python社区在这方面早就有了很成熟的方案,BeautifulSoup就是这一类问题的克星,它专注于HTML文档操作。
BeautifulSoup是一个用于解析HTML文档的Python库,通过BeautifulSoup,你只需要用很少的代码就可以提取出HTML中任何感兴趣的内容,此外,它还有一定的HTML容错能力,对于一个格式不完整的HTML文档,它也可以正确处理。
安装BeautifulSouppipinstallbeautifulsoup4
BeautifulSoup3被官方放弃维护,你要下载最新的版本BeautifulSoup4。
HTML标签学习BeautifulSoup4前有必要先对HTML文档有一个基本认识,如下代码,HTML是一个树形组织结构。
htmlheadtitlehello,world/title/headbodyh1BeautifulSoup/h1p如何使用BeautifulSoup/pbody/html
它由很多标签(Tag)组成,比如html、head、title等等都是标签
一个标签对构成一个节点,比如html.../html是一个根节点
节点之间存在某种关系,比如h1和p互为邻居,他们是相邻的兄弟(sibling)节点
h1是body的直接子(children)节点,还是html的子孙(descendants)节点
body是p的父(parent)节点,html是p的祖辈(parents)节点
嵌套在标签之间的字符串是该节点下的一个特殊子节点,比如“hello,world”也是一个节点,只不过没名字。
使用BeautifulSoup构建一个BeautifulSoup对象需要两个参数,第一个参数是将要解析的HTML文本字符串,第二个参数告诉BeautifulSoup使用哪个解析器来解析HTML。
解析器负责把HTML解析成相关的对象,而BeautifulSoup负责操作数据(增删改查)。“html.parser”是Python内置的解析器,“lxml”则是一个基于c语言开发的解析器,它的执行速度更快,不过它需要额外安装
通过BeautifulSoup对象可以定位到HTML中的任何一个标签节点。
frombs4importBeautifulSouptext="""htmlheadtitlehello,world/title/headbodyh1BeautifulSoup/h1pclass="bold"如何使用BeautifulSoup/ppclass="big"id="key1"第二个p标签/pahref="