概述
Beautiful soup
灵活又方便的网页解析库,处理高效,支持多种解析器。
利用它不用编写正则表达式即可方便的实现网页信息的提取
安装
pip install beautifulsoup4
引入
import bs4 from
解析库
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
Python标准库 | BeautifulSoup(markup,"html.parser") | Python的内置标准库执行速度适中文档容错能力强 | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 |
lxml HTML 解析器 | BeautifulSoup(markup,"lxml") | 速度快文档容错能力强 | 需要安装C语言库 |
lxml XML 解析器 | BeautifulSoup(markup,["lxml", "xml"])``BeautifulSoup(markup,"xml") | 速度快唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(markup,"html5lib") | 最好的容错性以浏览器的方式解析文档生成HTML5格式的文档 | 速度慢不依赖外部扩展 |
安装解析器
$pip install lxml
$pip install html5lib
基本使用
-
安装包
pip install beautifulsoup4
pip install lxml
-
引入包
from bs4 import BeautifulSoup
-
构建对象
soup = BeautifulSoup(html,'lxml')
-
使用构造对象的方法
-
print(soup.prettify()) # 格式化代码
-
print(soup.title.string) # 获取文本对象的title内容
-
html = """ <!DOCTYPE html> <head> <title>TOP100榜 - 猫眼电影 - 一网打尽好电影</title> </head> <body> <div class="nav"> <ul class="navbar"> <li><a href="/" data-act="home-click" >首页</a></li> <li><a href="/films" data-act="movies-click" >电影</a></li> <li><a href="/cinemas" data-act="cinemas-click" >影院</a></li> <li><a href="http://www.gewara.com">演出</a></li> <li><a href="/board" data-act="board-click" class="active" >榜单</a></li> <li><a href="/news" data-act="hotNews-click" >热点</a></li> <li><a href="/edimall" >商城</a></li> </ul> </div> """ # 引入库包 from bs4 import BeautifulSoup # 声明对象,传入解析器lxml soup = BeautifulSoup(html,'lxml') # 格式化代码 print(soup.prettify()) print(soup.title.string)
-
标签选择器
选择标签
soup.title
soup.head
soup.p
获取标签名称
soup.title.name
获取标签属性
两种都可
soup.a['data-act']
soup.a.attrs['data-act']
获取内容
soup.a.string
嵌套选择
soup.head.title.string
, head标签下的title的内容
子节点和子孙节点
-
soup.ul.contents; 返回的是列表的形式
-
soup.ul.children; 返回的是迭代器,用for循环打印出了
-
for i,child in enumerate(soup.ul.children): print(i,child)
-
-
soup.ul.descendants; 返回的是所有子孙;
-
for i ,child in enumerate(soup.ul.descendants): print(i,child) """ <li><a data-act="movies-click" href="/films">电影</a></li> <a data-act="movies-click" href="/films">电影</a> 电影 """
-
父节点和祖先节点
-
soup.ul.parent 获取的是该标签的父标签
-
soup.ul.parents 获取到是该标签的父标签,该标签的父标签的父标签
-
print(list(enumerate(soup.ul.parents)))
-
兄弟节点
- soup.ul.li.next_siblings 获取后面的兄弟节点
- soup.ul.li.previous_siblings 获取前面的兄弟节点
标准选择器
find_all(name,attrs,recursive,text,**kwargs)
-
可根据标签名,属性、内容查找文档
-
name
-
print(soup.find_all('a')) print(soup.find_all('a')[0])
-
-
attrs
-
print(soup.find_all(attrs={'class':'navbar'})) print(soup.find_all(class_='navbar'))#class比较特殊需要写成 class_ print(soup.find_all(id='navbar'))
-
-
text
-
print(soup.find_all(text='商城'))
-
-
-
find(name,attrs,recursive,text,**kwargs)
find返回单个元素,find_all返回所有元素
- findparents() & findparent()
- find_next_siblings() & find_next_sibling()
- find_previous_siblings() & find_previous_sibling()
- find_all_next() & find_next()
- find_all_previous() & find_all_previou()
css 选择器
通过select()直接传入css选择器即可完成选择
- soup.select(’.class’)
- soup.select(’#id’)
- soup.select(‘ul li’)
获取属性
-
print(soup.select('a')[0]['data-act']) #('a')[0]是第一个a标签 #('a')[0]['data-act']是第一个a标签的data-act属性值
获取内容
-
print(soup.select('a')[0].get_text())
总结
- 推荐使用lxml解析库,必要时使用html.parser
- 标签选择筛选功能弱但是速度快
- 建议使用find(),find_all()查询匹配单个结果或者多个结果
- 如果对css选择器实习建议使用select()
- 记住常用的获取属性和文本的方法
最后
以上就是聪明路灯为你收集整理的py3爬虫--beautiful-soup库的使用Beautiful soup安装引入解析库安装解析器基本使用标签选择器标准选择器css 选择器总结的全部内容,希望文章能够帮你解决py3爬虫--beautiful-soup库的使用Beautiful soup安装引入解析库安装解析器基本使用标签选择器标准选择器css 选择器总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复