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

发布于 2024-12-10 12:16:11 字数 259 浏览 0 评论 0原文

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

例如,我可以使用类似:

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

或类似的内容,这样我就不会下载整个页面吗?

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

I'm not sure if this is possible and lxml documentation is not very good to me.

Can I for example use something like:

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

or similar, so that I don't download whole page?

If not with lxml is there some Python module that can do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请你别敷衍 2024-12-17 12:16:11

您可以尝试 增量解析

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>]

You could try 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)

yields

[<Element link at 9dc5aac>, <Element link at 9dc5adc>, <Element link at 9dc5b0c>]
谢绝鈎搭 2024-12-17 12:16:11

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

虽然我相信可以对文件的一部分发出 HTTP 请求(我认为通过 range 标头?),但这并不能保证在服务器端得到支持。

令人遗憾的是,HTTP 不包含将 XPath 查询与页面请求一起发送到服务器的方法,并且在发回的页面上运行该查询的结果。

No: lxml has to parse the whole page before it can be guaranteed to find an individual bit of it, and to parse it the whole page, it obviously has to download the whole page. (But see also unutbu’s answer for a potential partial downloading/parsing approach.)

And although I believe one can make HTTP requests for part of a file (I think via the range header?), that’s not guaranteed to be supported on the server side.

It’s a shame that HTTP doesn’t include a method for sending an XPath query to the server along with the page request, and have the results of running that query on the page sent back.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文