爬虫笔记(十四)——BeautifulSoup库
Beautifulsoup库:
该库是python语言写的,主要功能是将html、xml格式的数据对象解析成“标签树”,并进行遍历和维护,即可以从网页抓取数据。
借鉴的html是妹子图网站的源代码http://www.meizitu.com/
安装
sudo apt-get install Python-bs4
pip install beautifulsoup4
导入模块
from bs4 import BeautifulSoup
创建对象
soup =BeautifulSoup(text,'html.parser')#前一个参数为要解析的文本,后一个参数为解析模型
# lxml的HTML解析器:BeautifulSoup(mk,'lxml')——pip install lxml
# lxml的XML解析器:BeautifulSoup(mk,'xml')——pip install lxml
# html5lib的解析器:BeautifulSoup(mk,'html5lib')——pip install html5lib
这里使用bs4的解析器。
解析后的四大对象类型
- Tag
- NavigableString
- BeautifulSoup
- Comment
(1)Tag
Tag 是HTML 中的一个个标签,是最基本的信息组成单元,分别用<>和</>表示开头和结尾。
Tag下又分为标签的名字和属性,分别用<tag>.name 、 <tag>.attrs来表示。比如下面的一个标签:
<img alt="妹子即便你不带我去哪,默默跟在" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/01/limg.jpg" width="64"/>
soup.img.name可得到img,soup.img.attrs得到{'src': 'http://mm.chinasareview.com/wp-content/uploads/2017a/07/01/limg.jpg', 'width': '64', 'alt': '妹子即便你不带我去哪,默默跟在', 'height': '64'}这样的字典。soup.img.attrs['src']可得到图片的链接http://mm.chinasareview.com/wp-content/uploads/2017a/07/01/limg.jpg。
print (soup.img.parent.name)#该标签的父标签的名字
#a
print (soup.img.parent.parent.name)#该标签的父标签的父标签的名字
#li
(2)NavigableString
标签内非属性字符串,<>...</>中的字符串,格式:<tag>.string。
在上个标签示例中,他会返回None。下面以一个title标签来展示:
<title>妹子图 - 清纯美女,可爱美女,美女图片</title>
很明显这个标签的属性会返回一个空字典{},name是title,soup.title.string可以得到妹子图 - 清纯美女,可爱美女,美女图片的字样。
(3)BeautifulSoup
BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性。
(4)Comment
Comment 对象是一个特殊类型的 NavigableString 对象,是标签内字符串的注释部分,以尖括号叹号表示注释开始:<! --This is a comment -->。
标签获取
根据表签名来获取所有符合的标签,返回一个列表。如soup('img')可得到如下:
[<img alt="妹子即便你不带我去哪,默默跟在" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/01/limg.jpg" width="64"/>, <img alt="Merry Christmas 圣诞的福利" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/limg.jpg" width="64"/>, <img alt="气质俏佳人,即便是小巷子也辣么" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/05/limg.jpg" width="64"/>, <img alt="送福利,祝大家2018年元旦快乐" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/02/limg.jpg" width="64"/>, <img alt="女神范十足!气质美女友希私房写" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/06/15/limg.jpg" width="64"/>, <img alt="能娶到打排球的女孩,简直就是走" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/17/limg.jpg" width="64"/>, <img alt="周末福利图,个个身材都超赞" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/09/limg.jpg" width="64"/>, <img alt="简直...不一样的可爱风,刮的你" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/08/limg.jpg" width="64"/>, <img alt="晚上拍照不美哒哒?看到这张图你" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/10/limg.jpg" width="64"/>, <img alt="做女人不管胖瘦美丑,最重要的是" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/06/13/limg.jpg" width="64"/>, <img alt="内涵图,为什么我遇不到这么好的" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/06/limg.jpg" width="64"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2018a/01/01/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/02/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/21/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/20/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/19/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/18/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/17/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/16/01.jpg" style="width:100%;"/>, <img src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/15/01.jpg" style="width:100%;"/>, <img alt="能娶到打排球的女孩,简直就是走" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/17/limg.jpg"/>, <img alt="超高颜值的同时不乏一丝性感,等" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/12/limg.jpg"/>, <img alt="这些完美翘臀真让人垂涎欲滴" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/16/limg.jpg"/>, <img alt="送福利,祝大家2018年元旦快乐" src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/02/limg.jpg"/>, <img alt="张张令人血脉喷张,身材好到爆" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/18/limg.jpg"/>, <img alt="简直...不一样的可爱风,刮的你" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/08/limg.jpg"/>, <img alt="萌萌纯纯的,但你能从里面挑出哪" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/04/limg.jpg"/>, <img alt="Merry Christmas 圣诞的福利" src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/limg.jpg"/>, <img alt="笑容是女人最美丽、最有效的武器" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/13/limg.jpg"/>, <img alt="妹子图重新开更:来一波美臀先" src="http://mm.chinasareview.com/wp-content/uploads/2018a/01/01/limg.jpg"/>, <img alt="周末福利图,个个身材都超赞" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/09/limg.jpg"/>, <img alt="美胸大作战,纸巾准备好" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/20/limg.jpg"/>]
print(tag.name), #标签的名称
print(tag.attrs), #属性
print(tag.string) #标签内的文本显示
print(tag.get_text()) #获取标签内文本内容
搜索
用来查找标签元素:soup.find_all(name,attrs,string,**kwargs),返回一个列表类型的查找结果。
soup.find(name,attrs,string,**kwargs),直接返回满足的第一个结果。
(1)按标签查找
print (soup.find_all('img')[0]) #按字符串查询
#<img alt="妹子即便你不带我去哪,默默跟在" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/07/01/limg.jpg" width="64"/>
print (soup.find_all(re.compile("^img"))[0] ) #按正则表达式查询
print(soup.find_all(["a", "b"])[0]) #按列表查询
print(soup.find_all(True)[1]) #查询所有元素,第一个元素就是html元素,就是整个全文
(2)按属性查找
print (soup.find_all(alt="Merry Christmas 圣诞的福利")) #按属性值查询
#[<img alt="Merry Christmas 圣诞的福利" height="64" src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/limg.jpg" width="64"/>, <img alt="Merry Christmas 圣诞的福利" src="http://mm.chinasareview.com/wp-content/uploads/2017a/08/01/limg.jpg"/>]
print(soup.find_all(href=re.compile("#"))) #按属性值的正则表达式查询
print(soup.find_all(href=re.compile(".*index\.html"), target='_blank')) #按属性值列表查询
print(soup.find_all("a", class_="current")) #标签属性联合搜索,class 是 python 的关键词,所以加了_
print(soup.find_all(attrs={"class": "current"})) #搜索包含指定属性值的元素
(3)按文本查找
print(soup.find_all(text="首页")) #按文本搜素,接受的参数与按标签搜索一样
print(soup.find_all("a", limit=2,recursive=False)) #以上所有搜索都可以用limit限定最大搜索到的数目,用recursive限定只搜索直接子节点
(4)按CSS选择器查找
print (soup.select("title"))#按名称
#[<title>妹子图 - 清纯美女,可爱美女,美女图片</title>]
print(soup.select('.current')) #按类名
print(soup.select('#headerImg')) #按id
print(soup.select('li .current')) #后代查询
print(soup.select("head > title")) #子标签查询
print(soup.select('a[class="current"]')) #属性查询
爬虫笔记(十四)——BeautifulSoup库的更多相关文章
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:/ ...
- python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化
实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件和excel文件. 实 ...
- python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法
最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的<python网络爬虫与信息提取>,是由北京理工的副教授嵩天老 ...
- (C/C++学习笔记) 十四. 动态分配
十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...
- 005 爬虫(requests与beautifulSoup库的使用)
一:知识点 1.安装requests库 2.Brautiful soup 可以提供一些简单的,python式的函数来处理导航,搜索,修改分析树等功能. 她是一个工具箱,通过解析文档为用户提供需要抓去的 ...
- python之爬虫(八)BeautifulSoup库的使用
上一篇文章的正则,其实对很多人来说用起来是不方便的,加上需要记很多规则,所以用起来不是特别熟练,而这节我们提到的beautifulsoup就是一个非常强大的工具,爬虫利器. beautifulSoup ...
- How tomcat works 读书笔记十五 Digester库 上
Digester库 在前面的几个章节里,我们对tomcat里各个组件的配置完全是使用写硬编码的形式完成的. 如 Context context = new StandardContext(); Loa ...
- MySQL学习笔记十四:优化(1)
SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...
- TCP/IP详解 笔记十四
TCP/IP协议(二) 连接的建立与终止 tcpdump -S输出TCP报文的格式 格式: 源>目的:标志 (标志就是tcp头部).标识首字符意义如下: 例如:telnet 某服务的输出(包括 ...
随机推荐
- DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing
客户端当发送空的json字符串时,请求RestController时,报错: DefaultHandlerExceptionResolver : Failed to read HTTP message ...
- 基于python的小波阈值去噪算法
https://blog.csdn.net/alwaystry/article/details/52756051 发表于 2018-01-10 16:32:17 嵌入式设计应用 +关注 小波图像去噪原 ...
- chan-vese模型
Python--level set (水平集)和 chan-vese模型 2018年08月28日 10:51:54 GlassySky0816 阅读数:1604 版权声明:本文为博主原创文章,未 ...
- python 流行库、库的基本用法
进入github,输入python 点击see topic 进入python流行的库 链接 https://github.com/topics/python 1.QuantLib 金融衍生品数据库 ...
- Java算法练习——两数相加
题目链接 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新 ...
- MSE(均方误差)、RMSE (均方根误差)、MAE (平均绝对误差)
1.MSE(均方误差)(Mean Square Error) MSE是真实值与预测值的差值的平方然后求和平均. 范围[0,+∞),当预测值与真实值完全相同时为0,误差越大,该值越大. import n ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:HTML DOM 集合(Collection)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- vue 插槽 part3
f vue中的插槽 1.<slot>默认内容</slot> 当副组件不传递信息的时候 显示默认内容 2.<slot></slot> 显示的是插槽中所有的 ...
- CentOS8上用Docker部署开源项目Tcloud
一.安装Docker 1.我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上) root账户登录,查 ...
- 关于visual studio和vc版本之间的对应关系
VC6 VC7: Visual studio.net VC7.1: Visual studio 2003 VC8: Visual studio 2005 VC9: Visual studio 2008 ...