一: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(.)') #抓小(含 与空格) str=info.replace(' ','').replace(' ','') #把 与 空格 处理掉 print str