是否可以读取大型网页的最后几行(或1000个字符)?

时间:2009-01-06 22:54:28

标签: html language-agnostic

我们需要每5分钟轮询一次网页,网页越来越大。网页是目录列表,我们需要最后一行(获取文件名)。获得最后一行的最佳方法是什么?

(如果这是一个本地文件,我可以相对于文件末尾稍微回位并阅读。)

7 个答案:

答案 0 :(得分:13)

HTTP 1.1支持一组标头,仅请求特定范围的字节,包括仅支持文件的最后n个字节(使用“后缀”格式)。见here。例如,

Range: bytes=-1000

表示最后1000个字节。 (当然,假设服务器支持Range标头。)

答案 1 :(得分:2)

HTTP确实支持分块响应,这意味着您可能会要求使用相同的页面,但要求使用不同的偏移IIRC。检查HTTP RFCs

编辑:检查RFC-2616后,它是您想要的Range:HTTP标头。

答案 2 :(得分:1)

您有两种选择:

  1. 使用分块编码。请参阅http://msdn.microsoft.com/en-us/library/aa287673.aspx注意Range请求标头字段。您的服务器也必须支持它。

  2. 使用FTP并在ftp命令上执行“重启”,并使用您需要的偏移量。

答案 3 :(得分:0)

以编程方式使用FTP和恢复?

答案 4 :(得分:0)

您可以使用urllib2(内置)和Beautiful Soup第三方模块(easy_install BeautifulSoup)的组合在python中执行此操作。

您需要加载整个页面,无论数据是按顺序流式传输到本地计算机。但是,urllib2可以轻松连接和检索页面,而Beautiful Soup会将原始HTML转换为可以使用“点语法”遍历的易于导航的层次结构。

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen(url)
html = page.read()
soup = BeautifulSoup(html)
# assumes you're looking for a tag in the body with an id='last-line' attribute on it
tag = soup.html.body.find(id='last-line')
# this will print a list of the contents of the tag
print tag.contents
# if only text is inside the tag you can use this
print tag.string

答案 5 :(得分:0)

如果你无法使分块编码和范围标题工作,那么我建议使用CGI脚本或任何你感觉舒服的工作服务器端。检索整个文件只是为了检查整条线似乎很浪费!

如果您发布了正在使用的操作系统和网络服务器,我相信如果您遇到问题,有人会在几分钟内向您发送有效的CGI脚本。

答案 6 :(得分:-2)

一个脏的黑客就是在Word中打开它并记录一个宏来抓取最后一行(可能涉及删除表等)。

以下VBA代码打开“堆栈溢出”的google定义结果,并删除页眉和页脚,只留下结果列表:

Sub getWebpage()

Documents.Open FileName:="http://www.google.com/search?hl=en&safe=off&rls=com.microsoft%3A*&q=define%3A+stack+overflow"

With Selection
    .MoveDown Unit:=wdLine, Count:=8, Extend:=wdExtend
    .Delete Unit:=wdCharacter, Count:=1
    .MoveRight Unit:=wdCharacter, Count:=1
    .EndKey Unit:=wdStory
    .MoveUp Unit:=wdParagraph, Count:=5, Extend:=wdExtend
    .Delete Unit:=wdCharacter, Count:=1
End With

End Sub

然后抓住结果并将其写在某处。

编辑:这很可怕,我只是录制并改变了一点。