文章目录

  • 第三章:数据解析---聚焦爬虫
    • 注:本页示例所用的test.html文档
    • 一、编码流程
    • 二、数据解析分类
    • 三、数据解析原理概述
    • 四、bs4要点
      • 1.bs4数据解析原理:
      • 2.相关属性:
    • 五、xpath要点
      • 1.xpath解析原理:
      • 2.实例化一个etree对象
        • (1)导入etree对象
        • (2)实例化一个etree对象
        • (3)xpath表达式:

第三章:数据解析—聚焦爬虫

爬取页面指定内容

注:本页示例所用的test.html文档

<!--test.html-->
<html lang="en">
<head><meta charset="UTF-8" /><title>测试bs4</title>
</head><body><div><p>百里守约</p></div><div class="song"><p>李清照</p><p>王安石</p><p>苏轼</p><p>柳宗元</p><a href="http://www.song.com/" title="赵匡胤" target="_self"><span>this is span</span>宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a><a href="" class="du">总为浮云能蔽日,长安不见使人愁</a><img src="http://www.baidu.com/meinv.jpg" alt="" /></div><div class="tang"><ul><li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li><li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li><li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li><li><a href="http://www.sina.com" class="du">杜甫</a></li><li><a href="http://www.dudu.com" class="du">杜牧</a></li><li><b>杜小月</b></li><li><i>度蜜月</i></li><li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li></ul></div>
</body>
</html>

一、编码流程

  • 指定url
  • 发起请求
  • 获取响应数据
  • 数据解析
  • 持久化存储

二、数据解析分类

  • 正则re(略)
  • bs4
  • xpath(***)

三、数据解析原理概述

解析的局部文本内容都会存储在标签之间或者标签对应的属性进行存储
解析步骤:1)进行指定标签的定位;2)标签或者标签对应的属性中存储的数据进行提取(解析)

四、bs4要点

1.bs4数据解析原理:

(1)实例化一个BeautifulSoup对象,并将该页面的源码数据加载到该对象中

from bs4 import BeautifulSoup
bs = BeautifulSoup(html_text)

(2)通过调用beautifulSoup对象中的相关属性或者方法进行标签定位和数据提取

2.相关属性:

※find/find_all方法

#(1)bs.find('tagName') = bs.tagName  返回标签第一次出现的标签及所有内容
bs.find('div')
#(2)属性定位  bs.find('tagName', class_/id/attr='song')  只返回符合要求的第一个
data = bs.find('div',class_='song')
#(3)find_all() 返回符合要求的所有标签(列表)
dataList = bs.find_all('div', class_='song')

※select方法

#select('某种选择器(id,class,标签...)') 返回一个列表
print(bs.select('title'))  #通过标签进行查找
t_list = bs.select(".nav")   #按照类名进行查找
t_list = bs.select("#u1")  #按照类名进行查找t_list = bs.select("a[class='br1']")  #通过标签名加属性进行查找
#层级选择器t_list = bs.select("head > title")   #>表示一个层级
t_list = bs.select("head > title a")  #  空格表示多个层级t_list = bs.select(".mna ~ .bri")  #查找mna的兄弟标签  ~ 表示兄弟标签

※获取标签之间的文本内容

#bs.a.text/string/get_text()   三种方式获得
text = bs.title.string
a_text = bs.a.text
content_text = bs.content.get_text()
#区别:text/get_text()可以获取一个标签中所有的文本内容,非直系的也可以获取到
#string:只可以获取标签下的直系文本内容

※获取标签中的属性值

#采用中括号
result = bs.a['href']

五、xpath要点

1.xpath解析原理:

(1)实例化一个etree对象,且需要将解析的页面的源码加载到该对象中
(2)调用etree对象中的xpath方法结合着xpath表达式实现标签定位和内容的捕获

2.实例化一个etree对象

(1)导入etree对象

from lxml import etree

(2)实例化一个etree对象

实例化本地的一个html文档

etreeObj = etree.parse(filePath)
实例化一个从互联网上获取到的源码数据
etreeObj = etree.HTML('page_text')

(3)xpath表达式:

  • /: 示从根节点开始定位,表示的是一个层级
  • //: 表示的是多个层级
  • 属性定位:tag[@class=“className”]
  • 索引定位:/tag[index]
  • 取出文本:
    • tag/text() 取出直系内容
    • tag//text() 取出非直系标签中的所有内容
  • 取出属性:tag/@ttrName ==> //img/@src

简单示例

#1.一般用法
r = tree.xpath('/html/body/div') # '/':表示从根节点开始定位,表示的是一个层级
r = tree.xpath('/html//div') # '//':,表示的是多个层级
r = tree.xpath('//div')  #找到源码中所有的div标签, 表示从任意位置开始定位
# 2. 使用xpath进行属性定位
r = tree.xpath('//div[@class="song"]') #定位到所有div中属性名为song的div标签,返回一个列表,列表内的元素时对象类型,包含标签的内容
# 3.实现索引定位
r = tree.xpath('//div[@class="song"]/p') #此时返回四个p标签的信息 ,现在需要取到其中一个p标签的信息
r = tree.xpath('//div[@class="song"]/p[3]')  #此处注意,索引是从1开始的
# 4.取出文本信息
r = tree.xpath('//div[@class="tang"]/ul/li[5]/a/text()') #取出直系标签中的内容 ,返回值是一个列表
r = tree.xpath('//li[7]//text()')  #加‘//’取出非直系li标签中的内容(该标签下面的所有文本内容)
# 5.取出属性值
r = tree.xpath('//div[@class="song"]/img/@src') #取出img标签下的属性值 /@src,得到的是一个列表

第三章:数据解析---聚焦爬虫相关推荐

  1. c语言中,x-y,'105',ab,7f8那个是正确的,C语言程序设计_第三章 数据.ppt

    C语言程序设计_第三章 数据 * 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 学习运算符应注意 * 基本算术运算符: + - * / % 结合方向: ...

  2. python爬虫学习笔记-网络爬虫的三种数据解析方式

    爬虫的分类 1.通用爬虫:通用爬虫是搜索引擎(Baidu.Google.Yahoo等)"抓取系统"的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份 ...

  3. python爬虫中三种数据解析方式

    一.正解解析 常用正则表达式: 单字符: .: 除换行以外所有字符 []:[aoe] [a-w]匹配集合中任意一个字符 \d:数字 [0-9] \D: 非数字 \w :数字.字母.下划线.中文 \W ...

  4. C primer plus 学习笔记_第三章 数据和C

    第3章 数据和C 关键字:int .short.long.unsigned.char.float.double._Bool. _Complex._Imaginary 运算符:sizeof() 函数:s ...

  5. JSON三种数据解析方法

    JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么想要学好JSON解析就要了解什么是JSON数据,怎么快速解析它从而提升开发效率. 1 什么是JSON数据? 先 ...

  6. C Primer Plus 第三章 数据和C 阅读笔记

    第3章 数据和C 3.1 示例程序 3.1.1 程序中的新元素 3.2 变量与常量数据 3.3 数据:数据类型关键字 3.4 C语言基本数据类型 3.4.1 int类型 3.4.2 其他整数类型 3. ...

  7. C Primer Plus(第六版)第三章 数据和C

    笔记记录 1.float 类型可以储存带小数的数字. 2.printf()中使用%f来处理浮点值.%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面两位. 3.scanf()函数用于读 ...

  8. html中输出 u263c,《 JavaScript程序设计》—— 第三章 数据

    3.1 数据类型 JavaScript实际上有6种数据类型: 布尔值,只有true和false两个值 数值,比如 81 和 4.21 文本,JavaScript里称之为字符串 特殊值undefined ...

  9. java 反编译class文件_用Java实现JVM第三章《解析class文件》

    解析class文件 案例介绍 本案例主要介绍通过java代码从class文件中解析:class文件.常量池.属性表: 作为类(或者接口)信息的载体,每个class文件都完整地定义了一个类.为了使jav ...

最新文章

  1. 单元测试 Mocking 类库需具备的特性
  2. 如何用计算机弹逆战6,逆战星光弹夹使用方法介绍 轻松玩转星光弹
  3. 日常工作问题解决:centos/linux系统如何检测端口是否打开
  4. 《极速切水果游戏》有Python版了,曾风靡一时的手游能否富过“二代”?
  5. php任务队列有什么优势,PHP使用任务队列这个词的含义,到底什么是任务队列
  6. 进程上下文、中断上下文及原子上下文
  7. 苹果手机数据线充不了电_手机充电器充不了电?其实4招就能解决
  8. Ai极限真的存在吗?
  9. python数据可视化源码_Python数据分析:数据可视化实战教程
  10. 视频编码国家标准AVS与H.264的比较(节选)
  11. 利用matlab聚类分析,利用Matlab软件实现聚类分析
  12. docx4j操作word文档之替换模板数据
  13. 二维分类教案_大班数学活动二维分类
  14. 在c语言中temp的意思,temp
  15. TiDB集群手动安装
  16. Sqlite数据库对时间进行比较SQL语句
  17. 正态分布的前世今生(靳志辉“Ÿ)
  18. MATLAB与ROS联合仿真(慕羽)虚拟机镜像文件使用方法
  19. 微信小程序选择图片(相册中选择/相机拍摄)
  20. JST :Joint sentiment topic model ASUM :Aspect sentiment unification model

热门文章

  1. Serdes系列总结——system ibert IP使用
  2. android照片备份软件下载,照片备份云相册app下载-照片备份云相册 安卓版v1.9-PC6安卓网...
  3. 如何选择安全靠谱的交易软件?
  4. 网红椰子水顺利上市,Vita Coco在内卷的国内市场出圈难?
  5. word vba遍历文件,打开另外word修改保存
  6. 笔记——数字逻辑电路的RTL建模、设计与实现
  7. vue3.0 安卓和ios h5 移动端音频自定义圆环可拖拽播放(兼容微信浏览器)
  8. nats服务器状态未启用,消息系统NATS常见的几个问题
  9. 年薪NNN万数据库牛人牛新庄的成长历程
  10. VMware 安装好的系统 复制 (迁移) 到另外一台干净的电脑