Python——XPath使用
一:XPath介绍
XPath全称XML路径语言,用于确定XML文档中某部分位置。XPath基于XML树状结构,在树中寻找结点。
现在,一般使用XPath在XML中查找、提取信息,同时,它也支持HTML。所以,我们可以用XPath取代正则表达式来提取信息。
XPath通过元素以及属性进行导航。
二:XPath使用大概步骤
1:安装lxml模块
2:导入树形结构
from lxml import etree
3:把requests抓取的网页转化为树形结构
selector=etree.HTML(网页源码)
4:从树形结构中查找信息
selector.xpath(查找条件)
三:实战
Xpath提取内容:
手动分析法:右键网页—>审查元素—>点击左侧的树结构,逐层展开找到自己需要抓取的内容,这个逐层元素标签构成的路径就是目标元素的路径
谷歌浏览器生成法::右键网页—>审查元素—>点击左侧的树结构,逐层展开找到自己需要抓取的内容—>右键目标元素弹出菜单,选择“copy xpath”,即可获取目标元素的路径
观察可知,XPath提取内容的规律:
// 定位根节点
/ 进入下一层
/text() 获取当前层文本内容
/@XXX 获取XXX属性值
#coding:utf8
from lxml import etree
import requests #连接到网页获取源码
html=requests.get("http://www.74xw.com/")
html.encoding='utf-8'
str=html.text
#转为树形结构
selector=etree.HTML(str)
#使用xpath提取内容
titles=selector.xpath("/html/body/div[2]/div[1]/div[2]/div/a/@title")
for title in titles:
print title
四:特殊情况处理
相同字符开头的标签如何处理?
使用start-with(@属性名,属性值中开头相同的部分)
content=html.xpath("//div[start-with(@id,"class-")]/text()")
标签嵌套标签如何处理?
使用先抓大,再抓小的法则以及string(.):
data=html.xpath("//大标签")[0] #抓大
info=data.xpath('string(.)') #抓小(含\n与空格)
str=info.replace('\n','').replace(' ','') #把\n 与 空格 处理掉
print str
Python——XPath使用的更多相关文章
- 使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接
使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接: 使用requests获取html后,分析html中的标签发现所需要的链接在& ...
- Python Xpath语法
Python Xpath语法 一.选取节点 常用的路劲表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath('//div') 选取了div节点 ...
- python xpath
提取Item 选择器介绍 我们有很多方法从网站中提取数据.Scrapy 使用一种叫做 XPath selectors的机制,它基于 XPath表达式.如果你想了解更多selectors和其他机制你可以 ...
- 15-糗事百科(python+xpath)
爬取糗事百科的段子: 1.用xpath分析首要爬去内容的表达式: 2.用发起请求,获得原码: 3.用xpath分析源码,提取有用信息: 4.由python格式转为json格式,写入文件 #_*_ co ...
- selenium3 + python - xpath定位
什么是xpath呢? 官方介绍:XPath即为XML路径语言,它是一种用来确定XML1(标准通用标记语言3的子集)文档中某部分位置的语言.反正小编看这个介绍是云里雾里的,通俗一点讲就是通过元素的路径来 ...
- python xpath学习
一.选取节点: 二.谓词: 注意:在scrapy中用xpath进行搜索时,如果使用相对路径,要加上.,如,不然搜索的是整个文档.
- python+xpath+requests爬取维基百科历史上的今天
import requests import urllib.parse import datetime from lxml import etree fhout = open("result ...
- 13-爬取百度贴吧中的图片(python+xpath)
通过xpath分析页面,爬取页面中的图片: #_*_ coding: utf-8 _*_ ''' Created on 2018年7月15日 @author: sss function: 使用xpat ...
- Python Xpath 提取html整个元素(标签与内容)
提取html某标签中文字时,文字中含有:“<sub>2</sub>O<sub>5</sub>”,导致提取的文字不符合预期. 解决方法: #coding= ...
随机推荐
- C#设置有命令空间的属性
之前被问到一个问题,C#中如何设置android:name这样的属性?我的第一反应是直接setAttribute不就可以了么 SetAttribute(name, value), 可事实上却不行,因为 ...
- node.js使用mysql模块的坑
之前用node.js写的订餐系统,很容易挂掉,一直也没想去解决它.今天看了一下,试了试,原因是在连接数据库的时候没有对error事件进行处理,导致程序一直挂在那里,需要重启服务才能正常使用. ...
- SVG.js 基础图形绘制整理(二)
一.折线 var draw = SVG('svg1').size(300, 300); //画折线 //使用字符串点 // var polyline=draw.polyline('0,0 100,50 ...
- HTML5 本地文件操作之FileSystemAPI实例(一)
文件操作实例整理一 1.请求系统配额类型 console.info(window.TEMPORARY); //0 临时 console.info(window.PERSISTENT); //1 持久 ...
- Hype cycle(Gartner 成熟度曲线)
Hype cycle The hype cycle is a branded graphical presentation developed and used by the American ...
- [转]ThinkPHP的CURD易忽视点小结
转自: http://www.oschina.net/code/snippet_2285640_44437. 1.使用对象的方法插入数据 D用法. $Form = D('Form'); $data[' ...
- IDEA远程debug的使用
1.打开配置页面 2.添加远程调试配置 3.进行参数配置 不同的jdk版本,配置的参数是不一样的! 其中Host为远程服务器的地址,Port为远程debug的端口,注意要与前面设置的address保持 ...
- [leetcode]Longest Consecutive Sequence @ Python
原题地址:https://oj.leetcode.com/problems/longest-consecutive-sequence/ 题意: Given an unsorted array of i ...
- AOP AspectJ 字节码 示例 Hugo MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 服务器主体 "sa" 无法在当前安全上下文下访问数据库 XXX[SQLSTATE 08004] (错误 916). 该步骤失败。
作业脚本为use XXX go 修改为选择XXX数据库