我们需要每5分钟轮询一次网页,网页越来越大。网页是目录列表,我们需要最后一行(获取文件名)。获得最后一行的最佳方法是什么?
(如果这是一个本地文件,我可以相对于文件末尾稍微回位并阅读。)
答案 0 :(得分:13)
HTTP 1.1支持一组标头,仅请求特定范围的字节,包括仅支持文件的最后n个字节(使用“后缀”格式)。见here。例如,
Range: bytes=-1000
表示最后1000个字节。 (当然,假设服务器支持Range标头。)
答案 1 :(得分:2)
HTTP确实支持分块响应,这意味着您可能会要求使用相同的页面,但要求使用不同的偏移IIRC。检查HTTP RFCs。
编辑:检查RFC-2616后,它是您想要的Range:HTTP标头。
答案 2 :(得分:1)
您有两种选择:
使用分块编码。请参阅http://msdn.microsoft.com/en-us/library/aa287673.aspx注意Range请求标头字段。您的服务器也必须支持它。
使用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
然后抓住结果并将其写在某处。
编辑:这很可怕,我只是录制并改变了一点。