本文编写于 708 天前,最后修改于 708 天前,其中某些信息可能已经过时。
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>
<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>
,需要定位并抓取外层
<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")]')
参考
已有 3 条评论
博主已关闭本页面的评论功能
感谢分享 赞一个
防水材料加盟 2022-01-28 09:50
兄弟,换友链不,我添加你了,向你学学玩基金
人家故里 2021-12-30 10:28
已添加贵站哈哈哈,感谢🙏基金的话我也是在不断学习,今年感觉择时、择基,真的不简单,收益永远是认知的变现,未来我总结一点自己的学习心得体会,分享一些从业以来觉得不错的基金,一些的组合配置方法,希望能多交流🙏
Yugo 2021-12-30 21:00