热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python数据解析之XPath

原标题:python数据解析之XPath目录XPathXPath使用方法XPath使用小技巧

原标题:python数据解析之XPath

目录

XPath

XPath使用方法

XPath使用小技巧

案例—58二手房



XPath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

文章来源站点https://www.yii666.com/

xpath是最常用且最便捷高效的一种解析方式,通用型强,其不仅可以用于python语言中,还可以用于其他语言中,数据解析建议首先xpath。

XPath使用方法

xpath解析原理:


  1. 实例化一个etree的对象,且需要将被解析的页面源代码数据加载到该对象中

  2. 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

安装lxml

pip install -i https://mirrors.aliyun.com/pypi/simple/ lxml

from lxml import etree
tree = etree.parse('./tree.html') #从本地加载源码,实例化一个etree对象。必须是本地的文件,不能是字符串
tree = etree.HTML(源码) #从互联网加载源码,实例化etree对象
# / 表示从从根节点开始,一个 / 表示一个层级,//表示多个层级
r = tree.xpath('//div//a') #以列表的形式返回div下的所有的a标签对象的地址
r = tree.xpath('//div//a')[1] #返回div下的第二个a标签对象地址
r = tree.xpath('//div[@class="tang"]') #以列表的形式返回tang标签地址
r = tree.xpath('//div[@class="tang"]//a') #以列表的形式返回tang标签下所有的a标签地址
#获取标签中的文本内容
r = tree.xpath('//div[@class="tang"]//a/text()') #以列表的形式返回所有a标签中的文本
#获取标签中属性值
r = tree.xpath('//div//a/@href') ##以列表的形式返回所有a标签中href属性值

tree.html









文章来源地址51769.html

百里守约




前程似锦




前程似锦2



#后面改了名字

以梦为马











XPath使用小技巧

其实chrome浏览器早已经集成了一键复制xpath表达式的功能,我们不需要自己去构建,直接复制过来用就行。如在目标标签右键复制xpath表达式


案例—58二手房

将页面中的房源名称解析出来,即将title值解析出来就行

思路


  • 获取房www.yii666.com源名称所在的url,并获取其响应数据

  • 数据解析,构造xpath表达式。提取目标数据

import requests
from lxml import etree
url = "https://bj.58.com/ershoufang/p1/"
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
}
pag_respOnse= requests.get(url,headers=headers,timeout=3).text
#实例化一个etree对象
tree = etree.HTML(pag_response)
r = tree.xpath('//span[@class="content-title"]/text()') #获取所有//span标签为"content-title"的文本内容
print(r)

Tips:我们使用xpath进行数据解析时,不能直接看元素就进行构造xpath表达式,以为很多情况下从浏览中看的元素结构和爬取下来的源码结构不一样。所以正确方法是先将源码爬下来再观察进行构造xpath。

如下浏览器中的元素结构和爬取的元素结构就不一样。如果按照浏览器汇总的元素来构造xpath表达式,则不会解析成功!

来源于:python数据解析之XPath


推荐阅读
author-avatar
推球了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有