xpath

xpath语法

表达式描述
nodename选取此节点的所有子节点
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
. .选取当前节点的父节点。
@选取属性。
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>59.0</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

用法:

路径表达式结果
bookstore选取根元素 bookstore
bookstore/book选取属于 bookstore 的子元素的所有 book 元素
//book选取所有 book 子元素,而不管它们在文档中的位置
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素
/bookstore/book[position()❤️]选取最前面的2个属于 bookstore 元素的子元素的 book 元素
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00
  • //book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
  • //title | //price 选取文档中的所有 title 和 price 元素。
  • /bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title元素,以及文档中所有的 price 元素

1 starts-with():获取以…开头的元素
xpath(‘//div[stars-with(@class,”cs”)]’)

2 contains():获取包含…的元素
xpath(‘//div[contains(@id,”cs”)]’)

3 and:与的关系
xpath(‘//div[contains(@class,”cs1”) and contains(@class,”cs2”)]’)

4 text():
(1):xpath(‘//div[contains(text(),”cs”)]’)
(2):xpath(‘//div[@id=”cs“]/text()’)

轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)
ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身
attribute选取当前节点的所有属性
child选取当前节点的所有子元素
descendantdescendant 选取当前节点的所有后代元素(子、孙等)
descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身
following选取文档中当前节点的结束标签之后的所有节点
namespace选取当前节点的所有命名空间节点
parent选取当前节点的父节点
preceding选取文档中当前节点的开始标签之前的所有节点
preceding-sibling选取当前节点之前的所有同级节点
self选取当前节点

详细语法介绍参考:
https://www.w3school.com.cn/xpath/xpath_axes.asp

简单使用

import requests
from lxml import etree
#使用xpath
base_url = 'https://www.58pic.com/piccate/41-0-0-fo5.html'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
response = requests.get(url = base_url,headers = headers)
html = etree.HTML(response.content)

result_divlist = html.xpath('//div[@class="pic-box clearfix "]/div[@class="qtw-card"]')
num = 0   
for div in result_divlist:
    num+=1
    img_url = div.xpath('./a/div[@class="image-box"]/img/@data-original')[0] #//preview.qiantucdn.com/58pic/35/63/97/auto_258PIC58PIC58PICi8k58PICRQ7sP58PIC8R6_PIC2018.jpg!qt324_nowater
    img_base = 'http:'+img_url
    img_response = requests.get(url = img_base,headers = headers)
    if(num<=4):
        with open('./images/{}.png'.format(num),'wb') as f:
            f.write(img_response.content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值