Selenium Xpath定位唯一文本元素

Selenium Xpath定位唯一文本元素

问题概述

现有一网页,已知唯一文本元素a,需要定位父级的同级元素b并抓取文本b.text,如何实现

给出案例

<tr title="本次发行的可转债向发行人在股权登记日(2021年12月24日,T-1日)收市后中国结算上海分公司登记在册的原股东优先配售,原股东优先配售后余额部分(含原股东放弃优先配售部分)采用网上通过上交所交易系统向社会公众投资者发售的方式进行,余额由保荐机构(主承销商)包销。" data-index="1">
  <td style="width:  60px; " class="">110084</td>
  <td style="width:  60px; " class="">贵燃转债</td>
  <td style="width:  60px; " class="">
    <a class="red" href="/kzz/detail/110084.html">详细</a>&nbsp;
    <a href="//guba.eastmoney.com/list,sh110084.html">股吧</a>
  </td>
  <td class="nowrap desc_col" style="width:  110px; ">2021-12-27 周一</td>
  <td style="width:  60px; " class="">733903</td>
  <td style="width:  70px; " class="">100</td>
  <td style="width:  60px; " class="">
    <a href="......">600903</a>
  </td>
  <td style="width:  60px; " class="">
    <a href="/stockdata/600903.html">贵州燃气</a>
  </td>
  <td style="width:  60px; " class="">10.09</td>
  <td style="width:  60px; " class="">10.17</td>
  <td style="width:  70px; " class="">99.21</td>
  <td style="width:  60px; " class="">100.00</td>
  <td style="width:  60px; " class="">
    <span class="red">0.79%</span>
  </td>
  <td style="width:  55px; " class="">
    <span title="2021-12-24">12-24</span>
  </td>
  <td style="width:  55px; " class="">0.8780</td>
  <td style="width:  65px; " class="">10.00</td>
  <td style="width:  60px; " class="">
    <span title="2021-12-29">12-29</span>
  </td>
  <td style="width:  50px; " class="">-</td>
  <td style="width:  50px; " class="">
    <span title="-">-</span>
  </td>
</tr>

已知唯一元素为正股代码600903,即<a href="......">600903</a>,需要定位并抓取外层的第n个同级元素,包括<td style="width: 60px; " class="">10.09</td><span class="red">0.79%</span>

解决方法

通过selenium xpath的文本查询来实现定位,再通过父元素的同级查询来定位对应文本

# python selenium
xpath1 = '//a[text()=600903]/parent::*/following-sibling::*[2]'
stock_price = driver.find_element_by_xpath(xpath1).text
# 输出10.09
xpath2 = '//a[text()=600903]/parent::*/following-sibling::*[6]'
premium = driver.find_element_by_xpath(xpath2).text
# 输出0.79%

其中//a[text()=600903]是定位文本,/parent::*定位父元素,/following-sibling::*[n]则是用来定位之后第n个元素

附录

XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:

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

例子

获取父级:

response.xpath('//*[@class="ALink"]/parent::*')

获取后面同级第一个元素

response.xpath('//*[@class="ALink"]/following-sibling::*[1]')

获取 a 标签中含有 rsjfont8 样式的

response.xpath('//a[@class="rsjfont8"]')

获取 a 标签中除去 rsjfont8 样式的

response.xpath('//a[not(@class="rsjfont8")]')

参考

  1. XPath轴定位(轴和步)

  2. xpath 获取父级,和同级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值