爬虫笔记(十四)——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 某服务的输出(包括 ...
随机推荐
- 2.9 初识 jetpack
Android Jetpack 组件 Android Jetpack 组件是库的集合 这些库是为协同工作而构建的,也可以单独采用,同时利用 Kotlin 语言功能帮助提高工作效率.可全部使用,也可混合 ...
- Hibernate--(二)增删改查
1.增删改查: public class Test { public static void main(String[] args) { SessionFactory sf = new Configu ...
- Swift - 从相册中选择视频(过滤掉照片,使用UIImagePickerController)
(本文代码已升级至Swift4) 有时我们需要从系统相册中选择视频录像,来进行编辑或者上传操作,这时使用 UIImagePickerController 就可以实现. 默认情况下,UIImagePic ...
- 汉诺塔(思维、DP思想)
链接:https://ac.nowcoder.com/acm/contest/3007/C来源:牛客网 题目描述 现在你有 N 块矩形木板,第 i 块木板的尺寸是 Xi*Yi,你想用这些木板来玩汉诺塔 ...
- gogs 小团队使用 2
gogs 团队使用第二种方法如下, 前面办法参考前面的方法: 由 root 用户新建 organization, 比如说建立 hardware,然后把团队的 技术负责人拉到 owners 这个 tea ...
- LeetCode——39. 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...
- pyCharm中设置查看运行过程中的变量实时情况
1.点击运行栏的这个灰色向下剪头: 2.单击“Edit Configurations”, 3.在出现的窗口上,勾选上:“Show command line afterwards” 或 “run wit ...
- (7)opencv图片内部的基本处理
就是,给定我们一张图片,我们可以对图片的每一个像素的色彩进行处理 比如,我们的原图是这个样子 然后我首先将他变成灰度图(灰度图的行道是1,就是chanaual是1) 然后,我又将灰色图片的黑白进行颠倒 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:比较 和 逻辑运算符
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- shell教程<入门篇>
由于我平时的工作环境是linux,所以无可避免的经常使用命令行模式和shell脚本,而且有些命令行每天都要输好多遍,比如ssh登录之类的,所以干脆把平时常用的命令都写成脚本文件,所以特意开了一个she ...