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)
Python3爬虫(六) 解析库的使用之Beautiful Soup的更多相关文章
- 爬虫(五)—— 解析库(二)beautiful soup解析库
目录 解析库--beautiful soup 一.BeautifulSoup简介 二.安装模块 三.Beautiful Soup的基本使用 四.Beautiful Soup查找元素 1.查找文本.属性 ...
- ubuntu下的python网页解析库的安装——lxml, Beautiful Soup, pyquery, tesserocr
lxml 的安装(xpath) pip3 install lxml 可能会缺少以下依赖: sudo apt-get install -y python3-dev build-e ssential li ...
- Python爬虫【解析库之beautifulsoup】
解析库的安装 pip3 install beautifulsoup4 初始化 BeautifulSoup(str,"解析库") from bs4 import BeautifulS ...
- python爬虫之解析库Beautiful Soup
为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...
- 爬虫之解析库-----re、beautifulsoup、pyquery
一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...
- Python爬虫【解析库之pyquery】
该库跟jQuery的使用方法基本一样 http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...
- python爬虫三大解析库之XPath解析库通俗易懂详讲
目录 使用XPath解析库 @(这里写自定义目录标题) 使用XPath解析库 1.简介 XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言. ...
- 爬虫之解析库BeautifulSoup
介绍 Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等 ...
- 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结
1. Beautiful Soup简介 Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减 ...
随机推荐
- Windows 2012R2远程桌面服务部署环境简介
一.部署环境 服务器名 所属域 IP地址 服务器用途 备注 AD01 CONTOSO.COM 192.168.1.1 域控制器 采用Windows Server 2012 R2 Datacenter ...
- NO.004-2018.02.09《离思五首·其四》唐代:元稹
离思五首·其四_古诗文网 离思五首·其四 唐代:元稹 曾经沧海难为水,除却巫山不是云.曾经到临过沧海,别处的水就不足为顾:除了巫山,别处的云便不称其为云.曾经:曾经到临.经:经临,经过.难为:这里指“ ...
- 【[JSOI2007]文本生成器】
\(AC\)机上的计数\(dp\)啊 并没有想到反着求出不合法的串的个数,直接正面硬上 设\(dp[i][j][0/1]\)表示匹配出的长度为\(i\),在\(AC\)机上位置为\(j\),没有/有匹 ...
- linux服务基础之CentOS6编译安装mariadb
1. 下载mariadb https://downloads.mariadb.org/mariadb/+releases/ 2. 解压到指定目录 # tar xf mariadb--linux-x86 ...
- [18/11/22] 将点分十进制的IP地址化成二进制输出
#include <stdio.h> void binary(int d){ ,j,n,b[]={}; ){ n=d%; d=d/; b[i++]=n; //不停的除2,余数保存在b[8] ...
- com.microsoft.sqlserver.jdbc.SQLServerException: Socket closed 或者 该连接已关闭
com.microsoft.sqlserver.jdbc.SQLServerException: Socket closed 或者 该连接已关闭 解决方案: DBUtil公共方法如下: package ...
- 【题解】洛谷P1072 Hankson的趣味题 (gcd和lcm的应用)
洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) ( ...
- 读取静态的json文件
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- React Router 4 的使用(2)
Route Rendering Props 对于给定的路由如何渲染组件,有三种选项:component.render.children.你可以查看 <Route> 的文档来获取更多的信息, ...
- 手把手教你玩转 CSS3 3D 技术
css3的3d起步 要玩转css3的3d,就必须了解几个词汇,便是透视(perspective).旋转(rotate)和移动(translate).透视即是以现实的视角来看屏幕上的2D事物,从而展现3 ...