关于爬虫,你需要知道的BeautifulSoup(一)
日拱一卒|数据挖掘014
本篇推送涉及的代码链接:https://github.com/piyixiaeco/daily-code/blob/master/Beautiful%20Soup.ipynb
数据爬下来,大部分情况是 HTML 文本,也有少数是基于 XML 格式或者 Json 格式的数据,要想正确处理这些数据,你要熟悉每种数据类型的解决方案,比如 JSON 数据可以直接使用 Python自带的模块 json,对于 HTML 数据,可以使用 BeautifulSoup、lxml 等库去处理,对于 xml 数据,除了可以使用 untangle、xmltodict 等第三方库(Python之禅刘志军)。
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,通过 BeautifulSoup,只需要用很少的代码就可以提取出 HTML 中任何感兴趣的内容,此外,它还有一定的 HTML 容错能力,对于一个格式不完整的HTML 文档,它也可以正确处理。
一、安装
首先pip install beautifulsoup4
安装requests库
接下来导入beautifulsoup4并做个小测试
1 2
二、使用BeautifulSoup
仅用两行代码就可以使用BeautifulSoup
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>data</p>', 'html.parser')
构建一个 BeautifulSoup 对象需要两个参数:
-
<p>data</p>
解析的 HTML 文本字符串 -
html.parser
告诉 BeautifulSoup 使用哪个解析器来解析 HTML
Beautiful Soup库,也叫beautifulsoup4 或 bs4,约定引用方式如下,即主要是用BeautifulSoup类
from bs4 import BeautifulSoup
或import bs4
HTML 标签
在详细介绍BeautifulSoup之前,我们先来看看有关HTML标签的知识
HTML 是一个树形组织结构
Beautiful Soup库是解析、遍历、维护“标签树”的功能库
4- 它由很多标签(Tag)组成,比如 html、head、title等等都是标签
- 一个标签对构成一个节点,比如 <html>...</html>是一个根节点
- 节点之间存在某种关系,比如 h1 和 p 互为邻居,他们是相邻的兄弟(sibling)节点
- h1 是 body 的直接子(children)节点,还是 html 的子孙(descendants)节点
- body 是 p 的父(parent)节点,html 是 p 的祖辈(parents)节点
- 嵌套在标签之间的字符串是该节点下的一个特殊子节点,比如 “hello, world” 也是一个节点,只不过没名字。
关于HTML更多可以看关于爬虫,你需要知道的HTML知识
5如上图,标签名称为p
HTML文档,标签树,BeautifulSoup类三者是等价的,即BeautifulSoup对应一个HTML/XML文档的全部内容
6(一)基本元素
下面介绍BeautifulSoup类的基本元素:
7
1.Tag标签
8 9任何存在于HTML语法中的标签都可以用soup.<tag>访问获得,如上是获取a标签的信息。当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个。
2.Name 名字
10 11每个<tag>都有自己的名字,通过<tag>.name获取,字符串类型。
3.Attributes 属性
1213
一个<tag>可以有0或多个属性,字典类型
4.NavigableString 标签内非属性字符串
14 15NavigableString可以跨越多个层次
5.Comment 注释
16 17Comment是一种特殊类型
小结:五大类基本元素
18下一篇推文将介绍基于bs4的HTML内容遍历方法和搜索方法
参考资料:
1.Python爬虫知识点梳理
2.HTML文本解析库BeautifulSoup
3.Python网络爬虫与信息提取