/ : 最左侧的斜杠表示从根节点开始定位,中间的斜杠表示的是一个层级//:中间的//表示是多个层级,最左侧的//表示从任意位置开始定位. : 表示从当前目录开始定位属性定位: //tag[@属性名称='属性值']索引定位: //tag[@属性名称="属性值"]/p[3](索引从1开始)-取文本:/text(): 获取标签中嫡系文本内容,例:取a标签的标题; a/text()//text(): 获取标签下所有文本内容-取属性值:/@属性名 a/@href [另: xpath 返回的是一个list列表]
常用的几个功能函数
函数
用法

备注
starts-with
xpath('//div[starts-with(@id,"ma")]')
取id以ma开头的div节点
contains
xpath('//[contains(@id,"ma")]')
取id中包含ma的div节点
ends-with
xpath('//[ends-with(@id,"ma")]')
取id以ma结尾的div节点
有文件名为“htmltst.html”如下的html代码
<html lang="en"><head> <title>测试xpath</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://ww.baidu.com" title= "ging">清明时节雨纷纭,路上行人欲销魂,借问酒家何处有,牧童遥指杏花村落</a></li> <li><a href="http://ww.163 .com" title="gin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li> <li><a href="http://ww.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>
先安装lxml库
pip install lxml
练习代码如下:
from lxml import etreetree= etree.parse('htmltst.html')print(tree.xpath('/html/head/title/text()'))print(tree.xpath('//div[@class="song"]/p/text()'))print('//div',tree.xpath('//div'))print('//div[@class="song"]/p[4]----',tree.xpath('//div[@class="song"]/p[4]/text()'))#div[@class="tang"]ul_obj=tree.xpath('//div[@class="tang"]/ul/li')for ul_tang in ul_obj:print(ul_tang)if ul_tang.xpath('./a/@href'):print(ul_tang.xpath('./a/@href'))if ul_tang.xpath('./b'):print(ul_tang.xpath('./b/text()'))if ul_tang.xpath('./i'):print(ul_tang.xpath('./i/text()'))
示例二:
from lxml import etreeimport requestsurl="https://desk.zol.com.cn/dongman/"resp=requests.get(url)resp.encoding="gbk"#print(resp.text)et=etree.HTML(resp.text)base_url='https://desk.zol.com.cn/'a_href=et.xpath('//ul[@class="pic-list2 clearfix"]/li[@class="photo-list-padding"]/a/@href')print(a_href)img_href=et.xpath('//ul[@class="pic-list2 clearfix"]/li[@class="photo-list-padding"]/a/img/@src')urls=[]for href in a_href:if href.endswith("html"):urls.append(base_url+href)print(urls)