xpath解析

Python爬虫:Xpath语法笔记

    <div class="postBody">
        <div id="cnblogs_post_body" class="blogpost-body"><p><strong>一、选取节点</strong><br>

常用的路劲表达式:

表达式描述实例 
nodename选取nodename节点的所有子节点
xpath(‘//div’)
选取了div节点的所有子节点
/从根节点选取xpath(‘/div’)从根节点上选取div节点
//选取所有的当前节点,不考虑他们的位置
xpath(‘//div’)选取所有的div节点
.选取当前节点xpath(‘./div’)
选取当前节点下的div节点
..选取当前节点的父节点
xpath(‘..’)回到上一个节点
@选取属性
xpath(’//@calss’)
选取所有的class属性

二、谓语

谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点

实例:

 

表达式结果
xpath(‘/body/div[1]’)
选取body下的第一个div节点
xpath(‘/body/div[last()]’)
选取body下最后一个div节点
xpath(‘/body/div[last()-1]’)选取body下倒数第二个div节点
xpath(‘/body/div[positon()<3]’)选取body下前两个div节点
xpath(‘/body/div[@class]’)选取body下带有class属性的div节点
xpath(‘/body/div[@class=”main”]’)选取body下class属性为main的div节点
xpath(‘/body/div[price>35.00]’)选取body下price元素值大于35的div节点

 三、通配符

Xpath通过通配符来选取未知的XML元素

表达式结果
xpath(’/div/*’)
选取div下的所有子节点
xpath(‘/div[@*]’)
选取所有带属性的div节点

 四、取多个路径

使用“|”运算符可以选取多个路径

表达式结果
xpath(‘//div|//table’)
选取所有的div和table节点

五、Xpath轴

轴可以定义相对于当前节点的节点集

轴名称表达式描述
ancestor
xpath(‘./ancestor::*’)选取当前节点的所有先辈节点(父、祖父)
ancestor-or-selfxpath(‘./ancestor-or-self::*’)选取当前节点的所有先辈节点以及节点本身
attributexpath(‘./attribute::*’)选取当前节点的所有属性
childxpath(‘./child::*’)返回当前节点的所有子节点
descendantxpath(‘./descendant::*’)返回当前节点的所有后代节点(子节点、孙节点)
followingxpath(‘./following::*’)选取文档中当前节点结束标签后的所有节点
following-sibingxpath(‘./following-sibing::*’)选取当前节点之后的兄弟节点
parentxpath(‘./parent::*’)选取当前节点的父节点
precedingxpath(‘./preceding::*’)选取文档中当前节点开始标签前的所有节点

 

preceding-siblingxpath(‘./preceding-sibling::*’)选取当前节点之前的兄弟节点
selfxpath(‘./self::*’)选取当前节点

 

六、功能函数   

使用功能函数能够更好的进行模糊搜索

函数用法解释
starts-withxpath(‘//div[starts-with(@id,”ma”)]‘)选取id值以ma开头的div节点
contains
xpath(‘//div[contains(@id,”ma”)]‘)选取id值包含ma的div节点
and
xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘)选取id值包含ma和in的div节点
text()xpath(‘//div[contains(text(),”ma”)]‘)选取节点文本包含ma的div节点
   

scrapy xpath文档:http://doc.scrapy.org/en/0.14/topics/selectors.html

转载Xpath语法笔记

其他参考资料:
W3school——Xpath教程
八爪鱼Xpath定位教程

示例

import requests
from bs4 import BeautifulSoup
from lxml import html

headers1={'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36'}

url='http://wh.lianjia.com/ershoufang/d2'

res=requests.get(url,headers=headers1)  #爬取拼接域名

tree=html.fromstring(res.text)

houseInfo=tree.xpath('//div[@class="item_other text_cut"]//text()')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值