【问题标题】:Python crawler not finding specific XpathPython 爬虫找不到特定的 Xpath
【发布时间】:2015-02-21 11:59:06
【问题描述】:

我在这里问了我之前的问题:

Xpath pulling number in table but nothing after next span

这很有效,我设法在一个名为 xpath checker 的 firefox 插件中看到了我想要的数字。结果如下所示。

所以我知道我可以用这个 xpath 找到这个数字,但是当尝试运行 python 脚本来查找并保存它说找不到它的数字时。

try:
    views = browser.find_element_by_xpath("//div[@class='video-details-inside']/table//span[@class='added-time']/preceding-sibling::text()")
except NoSuchElementException:
    print "NO views"
    views = 'n/a'
    pass  

我不知道,通过不是最佳实践,但我现在只是在测试这个,试图找到数字。我想知道我是否需要在 xpath 的末尾更改一些东西,比如 .text,因为 xpath 检查器通常显示的结果略有不同。如下:

我需要使用我提供的 xpath 而不是上图中使用的那个,因为我只想要数字而不是日期。您可以在我之前的问题中看到部分来源。

提前致谢!在这里挠头。

【问题讨论】:

  • 有谁有想法吗?

标签: python html selenium xpath selenium-webdriver


【解决方案1】:

find_element_by_xpath() 中使用的 xpath 必须指向一个元素,而不是文本节点,也不是属性。这在这里很关键。

这里最简单的方法是:

  • 获取td的文本(父)
  • 获取span的文本(子)
  • 从父母的文字中删除孩子的文字

代码:

span = browser.find_element_by_xpath("//div[@class='video-details-inside']/table//span[@class='added-time']")
td = span.find_element_by_xpath('..')
views = td.text.replace(span.text, '').strip()

【讨论】:

  • 传奇,让我学习。我们在这里所做的是使用 xpath 找到我们不想要的位,这是在“span”中。然后我们将其删除。但我迷失的一点是 span.find_element_by_xpath('..') .. 代表什么。
  • @BubblewrapBeast .. 是一种使用xpath 获取元素父级的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
相关资源
最近更新 更多