Могу ли я загрузить только часть веб-страницы в Интернете с помощью lxml? - PullRequest
1 голос
/ 17 октября 2011

Я не уверен, возможно ли это, и документация lxml не очень хороша для меня.

Могу ли я, например, использовать что-то вроде:

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

или подобное, чтобыЯ не загружаю всю страницу?

Если нет с lxml, есть ли какой-нибудь модуль Python, который может это сделать?

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

Вы можете попробовать инкрементальный анализ :

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 голос
/ 17 октября 2011

Нет: lxml должен проанализировать всю страницу, прежде чем можно будет гарантировать, что он найдет отдельный бит, и, чтобы проанализировать всю страницу, он, очевидно, должен загрузить всю страницу.(Но посмотрите также ответ unutbu о возможном частичном подходе к загрузке / синтаксическому анализу.)

И хотя я считаю, что можно сделать HTTP-запросы для части файла (я думаю, через заголовок range?), Это не такгарантированно будет поддерживаться на стороне сервера.

Жаль, что HTTP не включает в себя метод для отправки запроса XPath на сервер вместе с запросом страницы, и имеет результаты выполнения этого запроса настраница отправлена ​​обратно.

...