将多个条件传递给 lxml xpath 时如何避免覆盖输出?
How to avoid overwriting output when passing more than one condition to lxml xpath?
考虑以下语法:
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()")
这解决了问题,但对于大型项目来说,这可能会降低内存效率,因为我必须在此处阻塞更多内存来存储全部内容,而不是仅存储我感兴趣的元素。
此 XPath 应该对 xpath("//tr//th//text() | //tr/td//text()")
有所帮助。
另外,这个是给你的
考虑以下语法:
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()")
这解决了问题,但对于大型项目来说,这可能会降低内存效率,因为我必须在此处阻塞更多内存来存储全部内容,而不是仅存储我感兴趣的元素。
此 XPath 应该对 xpath("//tr//th//text() | //tr/td//text()")
有所帮助。
另外,这个