【问题标题】:Trouble with data types after scraping a website with lxml and xpath使用 lxml 和 xpath 抓取网站后数据类型出现问题
【发布时间】:2015-03-18 19:00:07
【问题描述】:

我在网站上抓取数据并最终提取数字。问题是当我尝试在 Python 中对它返回的数据执行逻辑函数时

class 'lxml.etree._ElementStringResult'

我的问题是我可以将这些数据以某种方式转换为字符串或整数,以便我可以执行我的逻辑语句吗?

代码如下:

callType = item.xpath('.//span[contains(@id, "lblSignal")]')[0].text_content()

print callType

这是输出:

76

当我尝试对数据进行控制语句时,没有任何反应。我认为这是因为我正在尝试对不正确的类型进行逻辑。

callType = item.xpath('.//span[contains(@id, "lblSignal")]')[0].text_content()
print type(callType)
print callType

这是我的输出:

<class 'lxml.etree._ElementStringResult'>
76

因此,与其尝试使用“int”来完成控制语句,不如使用不同的类型。我已经尝试对变量进行类型转换,但它仍然是相同的数据类型。希望这会有所帮助...

【问题讨论】:

  • 没有看到代码很难知道从哪里开始,但是如果您看到的是一个对象,您可以尝试在数据上返回 str

标签: python xpath lxml


【解决方案1】:

xpath() 可能会返回_ElementStringResults 的列表,而不是普通的 Python 字符串。有时您可能希望拥有_ElementStringResults 的原因是,与strs 不同,它们记得他们的父母(他们可以通过getparent 方法访问)。

您只需将对象传递给strint 即可将其转换为字符串或整数。

for span in item.xpath('.//span[contains(@id, "lblSignal")]'):
    callType = int(span.text_content())

【讨论】:

  • callType = item.xpath('.//span[contains(@id, "lblSignal")]', smart_strings=False)[0].text_content() 仍然返回相同的数据类型。 .. 我猜我的语法搞砸了。
  • 问题在于xpath 返回的是Elements,而不是_ElementSringResults。不幸的是,text_content 方法没有smart_strings 参数。因此,您只需使用 strint 自己包装该值:callType = int(item.xpath('.//span[contains(@id, "lblSignal")]')[0].text_content())。事实上,对于整数,无论​​如何你都必须用 int 包装值。
  • 明白了。非常感谢您提供的信息。我是 lxml 和 xpath 的新手,但它很有趣。我非常感谢您的帮助。
猜你喜欢
  • 2019-02-13
  • 2014-11-24
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多