我可以使用lxml仅下载部分Internet网页吗?

时间:2011-10-16 20:10:29

标签: python web lxml

我不确定这是否可行,lxml文档对我来说不是很好。

我可以使用例如:

import lxml.html as lx
x = lx.parse('http://web.info/page.html')
y = x.xpath('\\something\interesting'[2])

或类似的,所以我不下载整个页面?

如果没有lxml,是否有一些Python模块可以做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以尝试incremental parsing

import urllib2
import lxml.html as LH

# request a partial download
url='http://www.python.org/'
req = urllib2.Request(url)
req.headers['Range'] = 'bytes=%s-%s' % (0, 1024)
f = urllib2.urlopen(req)
content=f.read()
# print(content)

# incremental parsing
parser=LH.HTMLParser()
parser.feed(content)
x = parser.close()
y = x.xpath('//link')
print(y)

产量

[<Element link at 9dc5aac>, <Element link at 9dc5adc>, <Element link at 9dc5b0c>]

答案 1 :(得分:1)

否:lxml必须解析整个页面才能保证找到它的单个位,并解析整个页面,显然必须下载整个页面。 (但也请参阅unutbu的潜在部分下载/解析方法的答案。)

虽然我相信可以对文件的一部分发出HTTP请求(我想通过range标题?),但不保证在服务器端支持。

遗憾的是,HTTP不包括向服务器发送XPath查询以及页面请求的方法,并且在页面上发送回运行该查询的结果。