【发布时间】:2016-01-20 17:01:24
【问题描述】:
我正在编写一个基本脚本来查看网页并在发生变化时与之交互。
我正在用 Perl 编写,使用 curl 获取页面并使用 grep 来观察它的变化。
我使用的watch结构如下
my $string = '';
do {
$string = curl -s --cookie cookie.txt "http://url.com/resource" | grep "thing_that_has_appeared"
} until ( $string ne '' );
然后将其传递到用于提取信息的字符串中。
当使用 curl 下载为文件时,页面本身为 16KB。
在运行此程序时,我发现在网络带宽和处理器使用方面都有很大的负载。
重点是尽可能密切地观察页面,即在秒或秒的几分之一范围内,因此可以接受一些合理的负载。我只是想知道我是否可能做错了,是否有更有效的方式来查看页面?
服务器没有发出Last-Modified 标头。
一旦我确认页面没有改变,有什么方法可以指示 curl(或中断它)停止下载页面?
我认为我主要需要在这里洞察力。我的太有限了。
编辑:作为对评论的回应,我已经包含了循环和指定的时间跨度。
【问题讨论】:
-
curl 命令只获取网页一次。如果您看到显着负载,那么您必须将此命令包装在一个未显示的循环中。请显示您的其余代码。您希望得到什么样的响应时间?您可以检查更改,例如,每天一次吗?最好的方法是检查 HTTP 标头。您确定更改不会反映在标题中吗?
-
"在我确认页面没有改变后,有什么方法可以指示 curl(或中断它?)停止下载页面?"如果没有像 Last-Modified 这样的标题,除非您下载整个内容,否则您无法确认该页面是否相同。 (如果只有最后一个字节发生了变化呢?)
-
什么是
"thing_that_has_appeared"?听起来您真的在等待特定的内容,而不是简单的更改 -
@ThisSuitIsBlackNot 好吧,知道了页面结构,以及我想观察哪一部分的变化,并假设它不是最后一个字节,我想我要问的是是否有办法忽略之后我正在观看的部分......
-
@Borodin 没错。该页面是一个列表。我正在做:如果列表为空,则什么也不做,一旦列表中出现某些内容,则执行操作。 grep 是我在列表中等待的,这是特定的,至少在 html 标记中。