elexy 发表于 2012-6-12 14:53:22

监控网页文本更新,并弹框报警

本帖最后由 elexy 于 2012-6-15 14:43 编辑

http://blog.sina.com.cn/s/blog_4d89b8340102dxro.html
此地址为财经博客,博主隔一会就会更新内容
思路: 每隔一分钟获取一下网页内容
监控两种字段1. 包含 5分钟高点2. 包含 5分钟低点

只要一出现符合条件字段 就将 那一整行内容(加上前面的时间,以及后面有可能带的各种字符) msgbox显示出来

模拟结果:应该弹出两次MSGBOX
9:52    5分钟高点,级别小
11:10    5分钟低点,级别小

这个需要用到正则,小弟不会,特请众高手帮忙搞出一段高效精简代码。
____________________________________________________________
11楼给出的方案,在获取更新时间方面没有问题,但是获取内容方面还需要完善,不能做到实时监控

bdancerlc 发表于 2012-6-12 14:53:23

本帖最后由 bdancerlc 于 2012-6-13 13:39 编辑

按照 楼上 高人 给的思路,简单做了一下! ...细节自己修改!...


#include <Array.au3>
Global $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.open('GET','http://blog.sina.com.cn/s/blog_4d89b8340102dxro.html')
$oHTTP.Send()
Global $FirstTime = $oHTTP.getResponseHeader('Last-Modified')
MsgBox(64,'首次检测时间:',$FirstTime)

$TEXT_BACK = BinaryToString($oHTTP.responsebody,4)
$Text = StringRegExp($TEXT_BACK,'\d+:\d+\s*5分钟[高低]点.*',3)
$Text = _ArrayUnique($Text)
_ArrayDisplay($Text)
               
AdlibRegister ( "_GET_New" , 1000*10) ; 定时 10秒

While 1
        Sleep(100)
WEnd

Func _GET_New()
        $oHTTP.open('GET','http://blog.sina.com.cn/s/blog_4d89b8340102dxro.html')
        $oHTTP.Send()
        Local $LastTime = $oHTTP.getResponseHeader('Last-Modified')
        If $LastTime <> $FirstTime Then
                $TEXT_BACK = $oHTTP.responseText
                $Text = StringRegExp($TEXT_BACK,'\d+:\d+\s*5分钟[高低]点.*',3)
                $Text = _ArrayUnique($Text)
                _ArrayDisplay($Text)
                $FirstTime = $LastTime
        EndIf
EndFunc

my788522 发表于 2012-6-12 15:12:27

看似很简单嘛

xx44t10 发表于 2012-6-12 20:43:04

金太少,银太少,这样的问题不会搞。

wei999 发表于 2012-6-12 22:33:11

LS的是在气人吗

afan 发表于 2012-6-12 22:56:57

那个网页的源码在正文数据方面复制填充了 293 份… 水分十足哦,浪费人家的流量

vdvod 发表于 2012-6-12 23:07:15

那么简单 直接抓包看响应头
这个页面html是静态页面 因为有返回Content-Length 所以不是动态 如果不判断文件更新时间 光判断这个文件大小就能知道是否已经更新网站内容
响应头:Last-Modified 文件最后生成的时间 这是WEB服务直接返回的 直接判断这个OK 如果你用浏览器访问 第一次会接收这个响应头信息并保存到缓存文件中 当你第二次访问时 你的浏览器会发送一个叫IF_MODIFIED_SINCE的请求头 这个请求头就是上次访问得到的Last-Modified的值 服务器会对比这个值 如果一样 就返回304 Not Modified给浏览器 浏览器这时候就直接读取缓存 而无需服务器输出html
还有一个叫ETag 和Last-Modified一样 不同的是ETag是可自定义的 一般是唯一标识 请求时发送的是IF_NONE_MATCH

以上说的这三个 都是静态html的页面才有效 如果是动态的 比如.php后缀的(或者他已经伪静态)时无效

bdancerlc 发表于 2012-6-12 23:13:27

本帖最后由 bdancerlc 于 2012-6-12 23:20 编辑

楼主稍微修改一下,加个时钟,定时进行操作应该就搞定了,这里细节就不处理了!...


正则:\d+:\d+\s*5分钟[高低]点.*


#include <Array.au3>
$TEXT_BACK = BinaryToString(InetRead('http://blog.sina.com.cn/s/blog_4d89b8340102dxro.html',1+8),4)
$Text = StringRegExp($TEXT_BACK,'\d+:\d+\s*5分钟[高低]点.*',3)
_ArrayDisplay($Text)

bdancerlc 发表于 2012-6-12 23:21:55

回复 5# afan


    水分确实很足,同样的数据,硬是出现了600+次...哈哈哈
{:face (245):}

zerobin 发表于 2012-6-13 00:22:36

学习了。感谢各位大大

elexy 发表于 2012-6-13 08:21:56

回复 7# bdancerlc

这破网页水份太多了,有没有办法筛选出精华呀?

jtzxgfy 发表于 2012-6-14 08:00:54

谢谢 bdancerlc  !

jtzxgfy 发表于 2012-6-14 08:48:07

本帖最后由 jtzxgfy 于 2012-6-14 08:50 编辑

请继续完善
bdancerlc 的代码显示:
9:525分钟高点& # 65292;级别小

能改成 好看一点的窗口显示,且显示成:9:52 5分钟高点 级别小  (不要显示 "& # 65292;")
就更好了
   谢谢!

jtzxgfy 发表于 2012-6-14 11:56:42

如何提取首页 http://blog.sina.com.cn/xuxiaoming8 中的 最新的
****日盘中同步分析提示 的网址? 太难了 的了这网址用bdancerlc 的监控代码

zhao_ming 发表于 2012-6-14 19:28:19

look looolook looolook looo
页: [1] 2
查看完整版本: 监控网页文本更新,并弹框报警