Python中BeautifulSoup模块详解
目录
- 前言
- 安装库
- 导入库
- 解析文档示例
- 提取数据示例
- css选择器
- 实例小项目
- 总结
前言
BeautifulSoup是主要以解析web网页的python模块,它会提供一些强大的解释器,以解析网页,然后提供一些函数,从页面中提取所需要的数据,目前是Python爬虫中最常用的模块之一。
安装库
在使用前需要安装库,这里建议安装bs4,也就是第四版本,因为根据官方文档第三版的已经停止更新。同时安装lxml解释器
pip3 install bs4
pip3 install lxml
导入库
from bs4 import BeautifulSoup
解析文档示例
这里以官方文档进行举例,我把常用的函数都举出来,实际开发过程中用到的不多,了解就可以。
# 取自《爱丽丝梦游仙境》的一段 html = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title" name=编程客栈"dromouse">The Dormouse's story</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/lacsie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/title" class="sister" id="link3">Tillite</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ # 解析文档,建立一个BeautifulSoup对象,各种函数都是针对此对象展开,此函数会自动编码为Unicode soup = BeautifulSoup(html,'lxml')
此函数有两个参数:
1、需要解析的文本,可以使字符串,可以使本地文件
2、解释器,这里有"lxml", "lxml-xml", "html.parser"编程客栈, or "html5lib",4种,可以解析绝大多数网编程客栈页,常用lxml解析 这里有一个坑,如果网页中没有规定编码格式,解释器就不能编码为Unicode,必须先声编程客栈明一下编码格式,只需要到网页源码中查找编码格式然后做个声明就可以。一般在网页中查找charset关键字。
# 美化文档,有些网页书写不规范,这个函数会补全标签,使其看起来更规范 print(soup.prettify())
提取数据示例
获取到文本后,接下来需要提取我们所需的数据,这里用到选择器 有三种选择器
标签选择器(tag选择器)
标准选择器
CSS选择器
1、标签选择器(tag选择器)
# 直接用标签获取标题 print("title: ", soup.title) # 获取标题文本 print(soup.title.text) # 获取p标签 print(soup.p) # 获取head标签 print(soup.head) # 获取a标签 print(soup.a)
输出:
标签中最重要的俩个属性:name、attributes
# 使用.name函数获取标签名 print('标题标签的名字: ', soup.title.name) # tag的属性用法和字典基本一样,可以用属性名取属性,类似字典的键值对,也可以用.attrs取属性: print('a标签中属性为"href"的值: ', soup.a["href"]) # 会返回一个字典,需要何种属性可自行提取 print('a标签的所有属性: ',soup.a.attrs) dict1 = soup.a.attrs # 属性为class的值 print('属性为class的值: ', dict1['class'])
输出:
这里的子孙父兄节点,我感觉用起来忒不顺手,可能是我学的不太彻底
精彩评论