我不确定这是否可行,lxml文档对我来说不是很好。
我可以使用例如:
import lxml.html as lx
x = lx.parse('http://web.info/page.html')
y = x.xpath('\\something\interesting'[2])
或类似的,所以我不下载整个页面?
如果没有lxml,是否有一些Python模块可以做到这一点?
答案 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查询以及页面请求的方法,并且在页面上发送回运行该查询的结果。