当前位置: 首页 > 知识库问答 >
问题:

使用布尔值与Python lxml执行不同的XPath表达式

翟沈义
2023-03-14

我试图使用python脚本和lxml从网站上获取天气数据。风速数据将被拉出并附加到一个列表中,以便以后进行操作。我可以很好地获得我需要的信息,当它被格式化时:

<div class = "day-fcst">
  <div class = "wind">
    <div class = "gust">
      "Gusts to 20-30mph"
    </div>
  </div>
</div>
<div class = "gust">
  <span class = "nowind">
    "Gusts less than 20mph"
  </span
</div>

我当前的代码使用Python检查span类是否等同于“nowind”,然后执行if和else语句,但只执行else语句。我当前的代码如下所示:

from lxml import html
import requests

wind = []

source=requests.get('website')
tree = html.fromstring(source.content)

if tree.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]/span/@class') == 'nowind':
  wind.append(tree.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]/span/text()'))
else:
  wind.append(tree.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]/text()'))

print wind

我想用一个XPath表达式来解决这个问题,该表达式将产生一个布尔值,而不是我当前的解决方案。如有任何帮助,不胜感激。我对使用XPath还是新手,因此对使用它的任何功能都不熟悉。

共有2个答案

张浩阔
2023-03-14
相关问题
鞠建安
2023-03-14

对于这两种情况,可以使用相同的xpath表达式。只需使用//div[@class=“day-fcst”]/div[@class=“wind”]/div[@class=“gust”]//text()

或者,您可以获取

元素,并使用 text_content()方法获取文本内容。

In [1]: from lxml import html

In [2]: first_html = '<div class = "day-fcst"><div class = "wind"><div class = "gust">"Gusts to 20-30mph"</div></div></div>'

In [3]: second_html = '<div class = "day-fcst"><div class = "wind"><div class = "gust"><span class = "nowind">"Gusts to 20-30mph"</span></div></div></div>'

In [4]: f = html.fromstring(first_html)

In [5]: s = html.fromstring(second_html)

In [6]: f.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]')[0].text_content()
Out[6]: '"Gusts to 20-30mph"'

In [7]: s.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]')[0].text_content()
Out[7]: '"Gusts to 20-30mph"'

In [8]: print(f.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]//text()'))
['"Gusts to 20-30mph"']

In [9]: print(s.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]//text()'))
['"Gusts to 20-30mph"']

 类似资料:
  • 问题内容: 所以我有一个关于考试作业的问题,在这个作业中,我们有一堆布尔表达式,例如: 然后,我们应该编写布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下所示的布尔表达式时,这将如何应用: 或者 通过三值逻辑可以很容易地找到第一个,但是我如何找出另外两个。 我知道这是一个非常基本的问题,但是我对此仍然是陌生的。 提前致谢 问题答案: 您需要布尔值和的三相真值表: 该表是缩写,依赖于布尔逻辑

  • 本文向大家介绍OCaml 布尔表达式的求值,包括了OCaml 布尔表达式的求值的使用技巧和注意事项,需要的朋友参考一下 示例 我们定义布尔表达式的类型,其原子由字符串标识为 并可以通过oracle : string -> bool给出原子的值来评估这些表达式,如下所示: 了解该功能如何清晰易读。由于正确使用了模式匹配,因此读取此功能的程序员只需很少的时间即可确保其正确实现。

  • 我正在寻找一种相对简单的(与编写解析器相比)方法来计算Java中的布尔表达式,我不想使用JEP库。 我有一个字符串表达式,如:

  • 我有一个方法,我有一个问题。下面的第二个方法promptForPinNumber()调用第一个方法canConvertToInteger(),然后根据布尔变量pinValid的值是true还是false执行操作。 当我单独执行方法canConvertToIntger()时,它运行良好,并且pinValid的值是正确的。 当我执行promptForPinNumber()并输入引发和异常的字符串时,p

  • 问题内容: 没有循环,是否有可能将所有列表值初始化为某个布尔值?例如,我要列出所有False的N个元素。 问题答案: 您可以这样做:- 注: - 请注意,你不应该有这样做的有相同的值,否则你会看到令人惊讶的行为像一个在下面的例子: - 如您所见,您在一个内部列表中所做的更改将反映在所有这些内容中。

  • 问题内容: 哪种列类型最适合在MySQL数据库中使用布尔值?我用,但我的同事用。 问题答案: 这些数据类型是同义词。