Python3爬虫(六) 解析库的使用之Beautiful Soup
Infi-chu:
http://www.cnblogs.com/Infi-chu/
Beautiful Soup
借助网页的结构和属性等特性来解析网页,这样就可以省去复杂的正则表达式的编写。
Beautiful Soup是Python的一个HTML或XML的解析库。
1.解析器
解析器 | 使用方法 | 优势 | 劣势 |
Python标准库 | BeautifulSoup(markup,"html.parser") | 执行速度适中、文档容错能力强 | 2.7.3和3.2.2之前的版本容错能力差 |
lxml HTML解析器 | BeautifulSoup(markup,"lxml") | 速度快、文档容错能力强 | 需要安装C语言库 |
lxml XML解析器 | BeautifulSoup(markup,"xml") | 速度快,唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(markup,"html5lib") | 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 | 速度慢、不依赖外部扩展 |
综上所述,推荐lxml HTML解析器
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello World</p>','lxml')
print(soup.p.string)
2.基本用法:
html = '''
<html>
<head><title>Infi-chu example</title></head>
<body>
<p class="title" name="dr"><b>title example</b></p>
<p class="story">link
<a href="http://example.com/elsie" class="sister" id="link1">elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">lacie</a>,
<a href="http://example.com/tillie" class="sister" id="link3">tillie</a>,
last sentence</p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.prettify()) # 修复html
print(soup.title.string) # 输出title节点的字符串内容
3.节点选择器:
选择元素
使用soup.元素的方式获取
提取信息
(1)获取名称
使用soup.元素.name获取元素名称
(2)获取属性
使用soup.元素.attrs
使用soup.元素.attrs['name']
(3)元素内容
使用soup.元素.string获取内容
嵌套选择
使用soup.父元素.元素.string获取内容
关联选择
(1)子节点和子孙节点
html = '''
<html>
<head><title>Infi-chu example</title></head>
<body>
<p class="title" name="dr"><b>title example</b></p>
<p class="story">link
<a href="http://example.com/elsie" class="sister" id="link1"><span>elsie</span></a>,
<a href="http://example.com/lacie" class="sister" id="link2"><span>lacie</span></a>,
<a href="http://example.com/tillie" class="sister" id="link3"><span>tillie</span></a>,
last sentence</p>
'''
from bs4 import BeautifulSoup
# 得到直接子节点,children属性
soup = BeautifulSoup(html,'lxml')
print(soup.p.children)
for i ,child in enumerate(soup.p.children):print(i,child)# 得到所有的子孙节点,descendants属性
soup = BeautifulSoup(html,'lxml')
print(soup.p.descendants)
for i,child in enmuerate(soup.p.descendants):print(i,child)
(2)父节点和祖先节点
调用父节点,使用parent属性
获取所有祖先节点,使用parents属性
(3)兄弟节点
next_sibling 下一个兄弟元素
previous_sibling 上一个兄弟元素
next_siblings 所有前面兄弟节点
previous_siblings 所有后面兄弟节点
(4)提取信息
4.方法选择器:
find_all()
find_all(name,attrs,recursize,text,**kwargs)
(1)name
soup.find_all(name='ul')
for ul in soup.find_all(name='ul'):print(ul.find_all(name='ul'))
for ul in soup.find_all(name='ul'):print(ul.find_all(name='li'))for li in ul.find_all(name='li'):print(li.string)
(2)attes
# 根据节点名查询
print(soup.find_all(attrs={'id':'list1'}))
print(soup.find_all(attrs={'name':'elements'}))# 也可以写成
print(soup.find_all(id='list1'))
print(soup.find_all(class='elements'))
(3)text
text参数可以用来匹配节点的文本,传入的形式可以是字符串,可以是正则表达式对象
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.find_all(text=re.compile('link')))
find()
返回一个元素
【注】
find_parents()和find_parent()
find_next_siblings()和find_next_sibling()
find_previous_siblings()和find_previous_sibling()
find_all_next()和find_next()
find_all_previous()和find_previous()
5.CSS选择器:
嵌套选择
for ul in soup.select('ul'):print(ul.select('li'))
获取属性
for ul in soup.select('ul'):print(ul['id'])# 等价于print(ul.attrs['id'])
获取文本
获取文本除了string属性还有get_text()方法
for li in soup.select('li'):# 效果一样print(li.get_text())print(li.string)
转载于:https://www.cnblogs.com/Infi-chu/p/8978363.html
Python3爬虫(六) 解析库的使用之Beautiful Soup相关推荐
- python爬虫解析库(Xpath、beautiful soup、Jsonpath)
1. HTML解析 HTML的内容返回给浏览器,浏览器就会解析它,并对它渲染. HTML 超文本表示语言,设计的初衷就是为了超越普通文本,让文本表现力更强. XML 扩展标记语言,不是为了代替HTML ...
- 爬虫智能解析库 Readability 和 Newspaper 的用法
舆情爬虫是网络爬虫一个比较重要的分支,舆情爬虫往往需要爬虫工程师爬取几百几千个新闻站点.比如一个新闻页面我们需要爬取其标题.正文.时间.作者等信息,如果用传统的方式来实现,每一个站点都要配置非常多的规 ...
- python爬虫智能解析库详解
文章很长 请耐心阅读 什么是爬虫 爬虫是做什么的?是帮助我们来快速获取有效信息的.然而做过爬虫的人都知道,解析是个麻烦事.比如一篇新闻吧,链接是这个: https://news.ifeng.com/c ...
- python爬虫xpath提取数据_python爬虫三大解析库之XPath解析库通俗易懂详讲
@(这里写自定义目录标题) 使用XPath解析库 1.简介 ??XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言.适用于XML和HTML文档的 ...
- python中stripped string_【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
1. Beautiful Soup简介 Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减少爬虫程 ...
- 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
1. Beautiful Soup简介 Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减 ...
- python网络爬虫学习笔记(九):Beautiful Soup的使用
文章目录 1.基本用法 2.节点选择器 2.1 获取属性和名称 2.2 获取内容 (1)子节点和子孙节点 (2)父节点和祖先节点 (3)兄弟节点 3.方法选择器 4.CSS选择器 Beautiful ...
- Python爬虫之(八)数据提取-Beautiful Soup
Beautiful Soup的简介 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单 ...
- Python3爬虫之Selenium库详解
1.Selenium库的介绍: Selenium库是用来自动化测试的工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染的问题.给浏览器发送指令,使得浏览器做出跳转,点击,下拉等动作,模拟 ...
最新文章
- 2.5英寸硬盘何止“五脏俱全”(硬盘构造再揭秘之四)
- Android 中如何计算 App 的启动时间?
- 十一.激光惯导LIO-SLAM框架学习之LIO-SAM框架---框架介绍和运行演示
- 停止页面定时刷新_Flutter实现倒计时功能、定时任务功能
- spring security reactive获取security context
- java-数组排序--插入排序
- 佳能ts9020墨盒不识别_佳能打印机哪一款性价比高 佳能打印机型号推荐【详解】...
- 浅析数据中心交换机芯片,中国自主可控国产化交换机已是历史必然
- 硬件基础知识(10)---元器件选型规范大全
- iOS 的 APP 如何适应 iPhone 5s/6.6s/6.6sPlus 三种屏幕的尺寸?
- sql 2008 R2 备份和还原
- 无绳园林设备行业调研报告 - 市场现状分析与发展前景预测
- c语言实现一个密码管理器(更新中)
- 嵌入式系统的概念,嵌入式系统的组成及特点,嵌入式系统的基本开发流程
- 在Ubuntu虚拟机使用ffmpeg采集摄像头的yuv视频数据
- ubuntu20.04安装mysql8
- P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
- 全国计算机二级下次报名时间,全国计算机二级考试报名时间
- 计算机预测自己未来的相貌,AI算法预测未来相貌,准确率高达90%以上
- 《水知道答案2》观后小结
热门文章
- Modifier ‘public‘ is redundant for interface methods错误
- 用python实现队列的循环左移和右移的实验原理_python的移位操作实现详解
- html分页器的实现原理,Django之分页器
- 字符界面运行mysql_详解linux系列之字符界面下MySQL+apache+php的源代码安装
- mysql 多物理机_MySQL 5.6同一物理主机配置多实例
- html页面加载动画尺寸,6种CSS3加载动画
- FPGA学习笔记---3种乘法器的比较
- MyBatis中resuleMap一对一和一对多属性字段映射
- Spring中控制反转IoC理论推导
- MongoDB两阶段提交实现事务