#数据解析中的最后一种方式,xpath是通用性最强的,注意边界高效的一中解析,最好用它来解析。

零、xpath解析原理与准备:

1.标签定位(实例化一个etree的对象,并且需要将被解析的页面源码数据加载到该对象中)

2.通过调用etree对象中的xpath方法结合着xpath表达式实现这个标签的定位和内容的捕获
3.环境的安装

一、如何实例化一个etree对象(两种形式):from lxml import etree

1.将本地的html文档中的源码数据加载到etree对象中:

 etree.parse(filePath)    #本地的文件路径   parse方法

2.可以将从互联网上获取的源码数据加载到该对象中

 etree.HTML('page_text')# 这里的etree是一个类,来自于lxml:from lxml import etree# 当etree对象实例化好了之后就可以调用这个xpath方法了。

3.重点是xpath表达式的编写————xpath(‘xpath表达式’)

from lxml import etreeif __name__=="__main__":tree=etree.parse('test.html') #已经实例化好了一个etree对象,且将被解析的源码加载到了该对象中。

下一步是用xpath方法。

比如说现在想去做标签的定位,这里定位就可以使用xpath表达式定位。
这个表达式可以根据层级关系去实现标签定位,这个层级关系在select方法当中有层级关系,而在xpath就是也只能是根据层级表达式去定位。

tree.xpath('/html/head/title')###表示从html里的head里的title去定位,html前的/表示我们是从根节点,或者说是根目录开始遍历的。

根节点或者根目录,即,在当前源码中,最外层的节点就是根节点,那我们从根节点开始从外到内一层一层定位就可以定位到title。

用r去接收一下xpath:

 #用r去接收一下xpath:r=tree.xpath('/html/head/title')print(r)

返回的是一个列表,列表当中存储的是一个标签,但是是element列表,这是这个标签被抽象成了element对象了。

还可以:

  r=tree.xpath('/html/body/div')print(r)

这个body里有三个div,所以返回的是一个包含三个div的element列表,这三个对象所表示的就是三个div标签。

最左侧的斜杠表示的是从根节点开始做定位,一个斜杠表示的是一个层级

如果:r=tree.xpath('/html//div')   ###运行,更刚刚的运行结果一样,//表示的是多个层级;可以从任意位置开始定位
如果:r=tree.xpath('//div')   ###返回的结果依旧是一样的,这三种表达式含义和作用是一样的,作用到最左侧还是表示从任意位置去定位三个div

(能不能用xpat既能进行属性定位?)
固定格式:属性(clxxx)定位:

      r=tree.xpath('//div[@class="song"]')print(r)# 运行返回的还是一个列表# 结论!!!# xpath返回的永远是一个列表把。//div[@class='song'] tag[@attrName="attrValue"]

二、获取第三个p标签——所以接下来需要实现索引定位

r=tree.xpath('//div[@class="song"]/p[3]')  #p是之前标签的直系标签,然后加上三,就是第三个标签,注意!!!这里的索引定位不是从0开始的,而是1!!!
注意!!!这里的索引定位不是从0开始的,而是1!!!

三、学会标签定位后,下一步就是如何取文本了

取文本:(标签中间所存储的文本内容)

1.第一种形式

r=tree.xpath('//div[@class="tang"]/ul/li[5]/a')
#也可以是:
r=tree.xpath('//div[@class="tang"]//li[5]/a')
#a标签获取到了。获取文本在其后加/text()

例如:

r=tree.xpath('//div[@class="tang"]//li[5]/a/text()')
print(r)

获取结果:

>>>['杜牧']

最终发现这个输出结果是存在在一个列表当中的,若想取得字符串,那就在后面加一个:[0]

   r=tree.xpath('//div[@class="tang"]//li[5]/a/text()')[0]
 >>>杜牧

2.第二种形式

 <li><i>度蜜月</i></li>     第七个li标签   (非直系标签里文字的获取)
r=tree.xpath('//li[7]//text()')
#     - /text()  获取标签下直系的文本内容
#     - //text()  获取非直系标签下的文本内容

3. 以上都是一个标签里的文本获取,如果想要获取div下面的所有标签文本怎么办?

首先必不可少的属性定位:‘//div[@class=“tang”]’

r=tree.xpath('//div[@class="tang"]//text()')

——取属性:(取得定位到标签所对应属性的数值/属值?)

四、 /@attrName(格式)

例如:想要获取img里src储存的值:

<div class="song"><img src="http://www.baidu.com/meinv.jpg" alt="" />
</div>

输入代码:

 r=tree.xpath('//div[@class="song"]/img/@src')print(r)

输出:

   >>>['http://www.baidu.com/meinv.jpg']

五、xpath图片数据爬取要点

1.如果爬取标题的过程中,爬取文字出现乱码情况,应该手动修改encoding,尝试两个方法:

encoding='utf-8'

或者:

title=title.encode('iso-8859-1').decode('gbk')#title是出现乱码的区域

2.将所爬取的资源下载进入文件夹:请求图片,进行持久化存储;

img_data=requests.get(url=img_src,headers=headers).content,,,
img_path='picLibs/'+img_name
with open(img_path,'wb') as fp:      ###文件需要打开多次,每打开一次就要需要往文件夹里写入图片一次,循环外部创建一个文件夹:fp.write(img_data)print(img_name,"下载成功!")
if not os.path.exists('./picLibs'):os.mkdir('./picLibs')

python爬虫:xpath解析相关推荐

  1. Python 爬虫 xpath 数据解析基本用法

    Python 爬虫 xpath 数据解析基本用法 1. 基本语法 1.1 解析 html 语法 1.2 获取标签 1.3 获取标签中的内容 1.4 获取标签中的属性 1.5 通过内容寻找结点 2. 实 ...

  2. python爬虫数据解析总结

    python爬虫数据解析总结 目录 python爬虫数据解析总结 1.概述 2.Xpath解析html数据 2.1.基本语法 1.查询语法 2.2.Xpath解析html数据 1.安装lxml库 2. ...

  3. Python爬虫——XPath的使用

    Python爬虫--XPath的使用 使用实例一:获取需要的文字 1.导入需要使用的模块 import urllib.request from lxml import etree 2.发送请求访问网站 ...

  4. python通过xpath解析网页爬取高清大图和王者荣耀英雄海报

    python通过xpath解析网页 xpath XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言.最初是用来搜寻 XML 文档的,但 ...

  5. python爬虫正则表达式实例-python爬虫 正则表达式解析

    这篇文章主要介绍了python爬虫 正则表达式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 - re.I # 忽略大小写 - re.M # 多 ...

  6. 硬核来袭!!!一篇文章教你入门Python爬虫网页解析神器——BeautifulSoup详细讲解

    文章目录 一.BeautifulSoup介绍 二.安装 三.bs4数据解析的原理 四.bs4 常用的方法和属性 1.BeautifulSoup构建 1.1 通过字符串构建 1.2 从文件加载 2.Be ...

  7. Python使用xpath解析html获取表情符号 emoji

    Python使用xpath解析html获取表情符号 emoji 1. 使用xpath解析html获取表情符号 2. 使用emoji打印表情 源码 参考 1. 使用xpath解析html获取表情符号

  8. Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用

    Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用 文章目录 Python - 爬虫 - Xpath定位之starts-with()和string( ...

  9. python爬虫xpath提取数据_python爬虫三大解析库之XPath解析库通俗易懂详讲

    @(这里写自定义目录标题) 使用XPath解析库 1.简介 ??XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言.适用于XML和HTML文档的 ...

  10. python爬虫正则解析及xpath解析,lxml解析库

    正则解析模块re re模块使用流程 方法一 r_list=re.findall('正则表达式',html,re.S) 方法二 # 1.创建正则编译对象 pattern = re.compile('正则 ...

最新文章

  1. 【跃迁之路】【425天】刻意练习系列184—SQL(2018.04.06)
  2. 基于PredictionIO的推荐引擎打造,及大规模多标签分类探索
  3. CSS3 :nth-child(n)使用注意
  4. easyexcel根据模板写入_ProxmoxVE 之 创建win10基础镜像模板
  5. linux du命令使用:目录大小排序
  6. spring boot一个模块加载不到引用另一个模块的mapper.xml报错org.apache.ibatis.binding.BindingException: Invalid bound sta
  7. LTP(LinuxTest Project)测试工具
  8. AlwaysOn 2016 新特性和提升
  9. STM32学习笔记(五)——通用定时器计数延时
  10. Recovering deleted Records
  11. HDU 5045 状压DP 上海网赛
  12. docker环境搭建redis-cluster集群(多台机器)
  13. python所有变量更新_python更新全局变量
  14. 解决springboot的application.yml配置不生效问题
  15. 网线断了也能上网?被限速?
  16. 基于Python排课选课系统设计与实现 开题报告
  17. 1.urllib爬取数据
  18. 如何写好一份前端简历
  19. 二级mysql选择题要对一半才能拿证书_计算机二级选择题需要达到多少分才能及格...
  20. 去重的几种方法(部分)

热门文章

  1. 用javascript访问操作iframe中的dom对象
  2. 如何申请软件著作权证书
  3. css linux 等宽字体,css 等宽字体有哪些
  4. Spring Cloud Netflix之Euraka Server注册中心
  5. CRM客户管理系统-SSM框架项目实战教程
  6. excel制作折线图
  7. 互联网周刊封面文章:全球网络广告三大趋势
  8. 使用ico图标†制作ico图标(浏览器图标
  9. java 颜色平滑渐变算法_颜色渐变算法
  10. jQuery 仿iGoogle视频的列表拖动缓冲特效