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的解析器。

解析后的四大对象类型

  1. Tag
  2. NavigableString
  3. BeautifulSoup
  4. 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库的更多相关文章

  1. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  2. 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:/ ...

  3. python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化

    实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件和excel文件. 实 ...

  4. python爬虫学习(一):BeautifulSoup库基础及一般元素提取方法

    最近在看爬虫相关的东西,一方面是兴趣,另一方面也是借学习爬虫练习python的使用,推荐一个很好的入门教程:中国大学MOOC的<python网络爬虫与信息提取>,是由北京理工的副教授嵩天老 ...

  5. (C/C++学习笔记) 十四. 动态分配

    十四. 动态分配 ● C语言实现动态数组 C语言实现动态数组,克服静态数组大小固定的缺陷 C语言中,数组长度必须在创建数组时指定,并且只能是一个常数,不能是变量.一旦定义了一个数组,系统将为它分配一个 ...

  6. 005 爬虫(requests与beautifulSoup库的使用)

    一:知识点 1.安装requests库 2.Brautiful soup 可以提供一些简单的,python式的函数来处理导航,搜索,修改分析树等功能. 她是一个工具箱,通过解析文档为用户提供需要抓去的 ...

  7. python之爬虫(八)BeautifulSoup库的使用

    上一篇文章的正则,其实对很多人来说用起来是不方便的,加上需要记很多规则,所以用起来不是特别熟练,而这节我们提到的beautifulsoup就是一个非常强大的工具,爬虫利器. beautifulSoup ...

  8. How tomcat works 读书笔记十五 Digester库 上

    Digester库 在前面的几个章节里,我们对tomcat里各个组件的配置完全是使用写硬编码的形式完成的. 如 Context context = new StandardContext(); Loa ...

  9. MySQL学习笔记十四:优化(1)

    SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...

  10. TCP/IP详解 笔记十四

    TCP/IP协议(二)  连接的建立与终止 tcpdump -S输出TCP报文的格式 格式: 源>目的:标志 (标志就是tcp头部).标识首字符意义如下: 例如:telnet 某服务的输出(包括 ...

随机推荐

  1. ABP .NET CORE 连接mysql

    1.安装mysql程序集,在项目XXX.EntityFrameworkCore下面添加程序集 pomelo.entityframeworkcore.mysql pomelo.entityframewo ...

  2. 使用NtQueryInformationFile函数获得不到完整路径

    #include <windows.h> #include <iostream> using namespace std; typedef struct _OBJECT_NAM ...

  3. (2)MongoDB副本集自动故障转移全流程原理

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...

  4. org.springframework.dao.CannotAcquireLockException异常分析

    错误信息如下: 2017-09-27 16:27:16.153 - [com.ldyun.base.service.impl.BaseRetailOrderServiceImpl] - 新增零售商品订 ...

  5. 视频课程 | Kubernetes的兴起

    视频课程 | Kubernetes的兴起 原创: 京小云 京东云开发者社区  4月3日 京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为 ...

  6. selenium登陆qq邮箱页面

    from selenium import webdriver driver = webdriver.Chrome() driver.get('https://mail.qq.com/cgi-bin/l ...

  7. 监听home键的广播

    public class HomeKeyReceiver extends BroadcastReceiver implements SanbotConstants{ private HomeKeyLi ...

  8. No module named cv2 报错处理

    运行python脚本出现“No module named cv2 ”,这时我们安装下opencv-python依赖即可 python3 -m pip install opencv-python

  9. java-简单工程模板

    1.maven <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all< ...

  10. "Mathematical Analysis of Algorithms" 阅读心得

    "Mathematical Analysis of Algorithms" 阅读心得 "Mathematical Analysis of Algorithms" ...