【发布时间】: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()")
这解决了问题,但对于大型项目,这可能会导致内存效率低下,因为我必须在此处阻塞更多内存来存储全部内容,而不仅仅是存储我感兴趣的元素。
【问题讨论】: