Xpath

xpah
什么是html

<!DOCTYPE html>
<html lang='zh'>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</htm l>

xpath是用在XML文档中定位元素的语言。
xpath通过路径来查找元素。
HTML是一种树形结构,所有的节点都是从根节点发散而来,每个节点具有属性和文本。
路径就是某个节点到另一个节点的路线。
节点关系:
父节点:parent,上一级节点。
子节点:child,下一级节点。
兄弟节点:sibling,同级节点,拥有相同的父节点。
祖先节点:ancestor,爷爷辈及以上节点。
后代节点:descendant,孙辈及以下节点。

绝对路径:可能会有变化。
相对路径:可以选取一个可以定位到唯一的元素,增加查找的准确性,一般xpath中都使用相对路径。
语法
/:从根节点开始
//:从任意节点开始
.:选取当前的节点
…:选取当前节点的父节点
@:选取属性
*:通配符,表示任意系节点或者任意属性。

//img[@class="main_img img-hover"]

[ ]可以看成是if判断条件
…:上一级,以上述为例代码为:
from scrapy.selector import Selector

from scrapy.selector import Selector

text = """
<html>
<table class = 'table'>
    <tr class = 'xm'>
        <td class = 'xm1'>xm1</td>
        <td class = 'xm2'>xm2</td>
        <td class = 'xm3'>xm3</td>
        <td class = 'xm4'>xm4</td>
        <td class = 'xm5'>小王 </td>
    </tr>
</table>
</html>
"""

函数:
text():节点的文本
取得是tr下td的文本。

result = html.xpath("//tr[@class='xm']//text()").getall()
print(result)

string():取得是string()内的内容:

result = html.xpath("string(//tr[@class='xm'])").get()

starts-with():表示选择以指定字符开头的id属性

result = html.xpath("//td[@class = 'xm1']/..").get()
print(result)

position():取第三个标签以后的

result = html.xpath("//tr[@class = 'xm']/td[position()>3]").getall()
print(result)

chilid:子类节点

result = html.xpath("//tr[@class='xm']/child::*").getall()
print(result)

-sibling:兄弟节点

result = html.xpath("//td[@class='xm4']/following-sibling::*[1]").get()
print(result)#结果取到的是xm4下面的一个兄弟节点。

following换行符的注意
选取文档中当前节点的结束标签,之后的所有节点。不论是什么节点

result = html.xpath("//td[@class='xm3']/following::text()").getall()
print(result)

preceding:选取文档中当前节点的开始标签之前的所有节点。
与following不同的是,following是向下,preceding则是从上向下。

contains():表示选择id中含有指定字符的div节点
包含:

result = html.xpath("//td[contains(@class,'xm')]").getall()
print(result)#@class也可以换成text()属性要加@,函数不用加

正则表达式:xpath中可以运用正则表达式。[re:mach()]用法与contains相同。

result = html.xpath("//td[re:match(@class,'xm\d+')]").getall()
print(result)

not,and

result = html.xpath("//td[contains(@class,'xm') and not (contains(text(),'小王'))]").getall()
print(result)

re_first()可以用来提取数字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值