【发布时间】:2018-04-28 04:41:36
【问题描述】:
我正在抓取一个论坛并尝试检索有关帖子的统计信息,特别是帖子获得的查看次数和回复次数。
我正在解析的页面源如下所示:
<ul class="ipsDataItem_stats">
<li>
<span class="ipsDataItem_stats_number">61</span>
<span class="ipsDataItem_stats_type"> replies</span>
</li>
<li class="ipsType_light">
<span class="ipsDataItem_stats_number">6,106</span>
<span class="ipsDataItem_stats_type"> views</span>
</li>
我已经编写了一些代码来提取我正在寻找的内容,但我想知道你们 xpath 专家会如何处理这个问题。
Stats = node.find_elements_by_xpath('.//ul[@class="ipsDataItem_stats"]')
Replies = (Stats[0].find_elements_by_xpath('.//span[@class="ipsDataItem_stats_number"]'))[0].text
Views = (Stats[0].find_elements_by_xpath('.//span[@class="ipsDataItem_stats_number"]'))[1].text
我的解决方案依赖于按特定顺序排列的统计数据,我想知道是否有更准确的方法来实现相同的结果。
例如伪代码:
Replies = node.find_elements_by_xpath({get span text where class = "ipsDataItem_stats" and sibling span class = "ipsDataItem_stats_type" and text = "replies"})
【问题讨论】:
-
more accurate或more elegant到底是什么意思?这些 xpath 表达式有什么问题? -
当网站呈现页面并翻转 li 元素以使浏览量第一而回复第二时会发生什么?或者他们添加了一个额外的统计数据,因此 Stats[0] 需要成为 Stats[1] 或 Stats[2] 等。我正在寻找一种方法来更准确地获取我所追求的元素,而不依赖它们在列表。
-
因此,如果您查看我的伪代码,这将是一种使用 1 个 xpath 查询填充回复的方法,我只是不知道如何构造该查询。
标签: python-2.7 selenium xpath