【问题标题】:How to avoid overwriting output when passing more than one condition to lxml xpath?将多个条件传递给lxml xpath时如何避免覆盖输出?
【发布时间】:2017-09-20 17:53:31
【问题描述】:

考虑以下语法:

from lxml.html import fromstring; from requests import get
url = some_url
fromstring(get(url).content).xpath("//tr//th//text()" and "//tr/td//text()")

这按预期执行。但是,我只为第二个条件"//tr/td//text()" 存储了输出,我怀疑这是由于第二个条件输出覆盖了第一个条件输出而不是同时存储它们。我试过类似的东西:

list1 = []
list1.append(fromstring(get(url).content).xpath("//tr//th//text()" and "//tr/td//text()")

但它的工作方式没有区别。我的问题是如何避免第二个输出覆盖第一个?

PS:我总是可以只解析 content 并将整个内容保存到内存中,然后依次获取两个 xpath 条件。

类似

r = fromstring(get(url).content)
r1 = r.xpath("//tr//th//text()")
r2 = r.xpath("//tr/td//text()")

这解决了问题,但对于大型项目,这可能会导致内存效率低下,因为我必须在此处阻塞更多内存来存储全部内容,而不仅仅是存储我感兴趣的元素。

【问题讨论】:

    标签: python parsing xpath lxml


    【解决方案1】:

    这个 XPath 应该对 xpath("//tr//th//text() | //tr/td//text()") 有所帮助。 另外,这个answer 是给你的

    【讨论】:

    • 还有一件事,有没有一种方法可以让我以嵌套列表的形式获得输出?比如:[[输出 xpath1],[输出 xpath2]]
    • 结果列表中有哪些数据?你可以在 xpath 之后尝试 split 或 slice
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2015-05-15
    相关资源
    最近更新 更多