1、BeautifuSoup 是什么
灵活又方便的网页解析库,处理高效,支持多种解析器,利用它不用编写正则表达式既可方便地实现网页信息的提取。
安装:
pip3 install beautifulsoup4
用法讲解
解析器 | 使用方法 | 优势 | 劣势 |
python标准库 | BeautifulSoup('带解析代码','html.parser') | python内置标准库 | 容错内里差 |
lxml HTML解析器 | BeautilfulSoup('带解析代码','lxml') | 速度快、文档容错能力强 | 需要安装C语言库 |
lxml XML解析库 | BeautifulSoup('带解析代码','xml') | 速度快、唯一支持xml的解析器 | 需要安装C语言库 |
html5lib | BeautifulSout('带解析代码','html5lib') | 最好的容错性、以浏览器的方式解析文档,生成html5格式的文档 | 速度快、不依赖外部扩展 |
来个栗子
from bs4 import BeautifulSouphtml =""""""soup = BeautifulSoup(html,'lxml')print(soup.prettify()) """格式化代码"""print(soup.li.string)
2、标签选择器
1、选择元素
from bs4 import BeautifulSouphtml =""""""soup = BeautifulSoup(html,'lxml')print(soup.title)print(soup.header)print(soup.li)
输出:
如果加了.string
print(soup.title.string)print(soup.header.string)print(soup.li.string)
输出就是具体的文字
标题
大脑袋博客园
2、获取名称
soup = BeautifulSoup(html,'lxml')print(soup.title.name) 输出: title
3、获取属性
soup = BeautifulSoup(html,'lxml')print(soup.li.attrs['name']) //第一种方式print(soup.li['name']) //第二种方式 输出: dromouse dromuser1
4、嵌套选择
soup = BeautifulSoup(html,'lxml') print(soup.li.attrs['name']) print(soup.ul.li.a.string) 输出: 博客园
5、子节点和子孙节点
soup = BeautifulSoup(html,'lxml') print(soup.li.attrs['name']) print(soup.ul.contents) //输出这个标签内部的全部标签及内容 输出: ['\n',标题 , '\n',大脑袋 , '....订阅
第二获取子节点:迭代器
soup = BeautifulSoup(html,'lxml') print(soup.ul.children) for i,child in enumerate(soup.ul.children): print(i,child)
输出:
第三 获取子节点: 子孙节点(迭代器)
soup = BeautifulSoup(html,'lxml') print(soup.ul.descendants) for i,child in enumerate(soup.ul.descendants): print(i,child) 输出:
6、find_all
soup = BeautifulSoup(html,'lxml') for ul in soup.find_all('ul'): print(ul.find_all('li')) 查找出所有ul下面的li标签及其子标签
7、attrs
soup = BeautifulSoup(html,'lxml') print(soup.find_all(attrs={"id":"blog_nav_admin"})) print(soup.find_all(attrs={"class":"aHeaderXML"}))
输出:
或者
print(soup.find_all(id="blog_nav_admin")) print(soup.find_all(class_="aHeaderXML")) 更加简单
8、find 是返回单个结果。 9、find_parents() 和 find_parent() 三、CSS 选择器 soup = BeautifulSoup(html,'lxml')
print(soup.select('.panal .panel-heading'))
print(soup.select('ul li'))
print(soup.select('#list-2 .element'))
print(soup.select('ul')[0])
获取属性
soup = BeautifulSoup(html,'lxml') for ul in soup.select('ul'): print(ul['id']) print(ul.attrs['id'])
获取内容
soup = BeautifulSoup(html,'lxml') for ul in soup.select('li'): print(ul.get_text()) 输出:
博客园
闪存首页新随笔联系管理订阅