美文网首页
自动检查内容是否更新

自动检查内容是否更新

作者: swimmer2000 | 来源:发表于2018-03-05 15:20 被阅读0次

小孩马上要上幼儿园了,想第一时间获取相关的信息,又不想隔三差五的去打开网页看,这类简单重复的任务最好让适合让电脑来做了。


解决方案是怎样的呢?先说作废的方案。用wget抓取页面内容,然后通过比较页面的hash值来判断页面是否有修改,但是发现两个问题:

  • wget不支持javascript。现在大部分网页的内容都是动态生成的,不支持javascript是一个硬伤
  • 每次获取网页时,网页内容都包含微小的变化,这些变化基本上都是时间相关的。
    通过这个页面, How to get WGET to download exact same web page html as browser,可以看到替代方案。

最后采用的方案也很简单:以支持javascript的方式抓网页内容、分析是否有修改(目前比较简单的判断是否有指定的字符串)、输出结果。

  • 抓取页面代码,分析是否包含
import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Crawler {
    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
        java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); /* comment out to turn off annoying htmlunit warnings */

        if (args.length < 2) {
            System.out.println("Please input url and keyword");
            return;
        }
        
        String url = args[0];
        String keywords = args[1];
        
        WebClient webClient = new WebClient();
        webClient.getOptions().setJavaScriptEnabled(true);  
        webClient.getOptions().setCssEnabled(false);
        
        HtmlPage page = webClient.getPage(url);
        
        webClient.close();
        
        String pageAsXml = page.asXml();
        if (pageAsXml.contains(keywords)) {
            System.out.println("Updated");
        } else {
            System.out.println("Not-Update");
        }
    }
}
  • 返回是否包含的结果

上面代码末尾的几行,就是判断是否包含指定内容并输出结果的语句。

if (pageAsXml.contains(keywords)) {
    System.out.println("Updated");
} else {
    System.out.println("Not-Update");
}
  • 自动执行

通过Windows的“任务计划程序”,添加一个定时的任务,执行的脚本如下:

cd /D "%~dp0"
set url="http://www.hkedu.sh.cn/HKEdu.Web/Default/InfoList.aspx?SignIn=true&CategoryID=061031a3-f95b-41dd-bee7-8e6634c0011e"
set keyword=2018
java -Dfile.encoding=GBK -classpath ..\bin;..\libs\htmlunit-2.29.jar;..\libs\httpclient-4.5.4.jar;..\libs\httpcore-4.4.7.jar;..\libs\commons-codec-1.10.jar;..\libs\commons-io-2.6.jar;..\libs\commons-lang3-3.7.jar;..\libs\commons-logging-1.2.jar;..\libs\commons-net-3.6.jar;..\libs\commons-text-1.2.jar;..\libs\cssparser-0.9.24.jar;..\libs\htmlunit-core-js-2.28.jar;..\libs\httpmime-4.5.4.jar;..\libs\jetty-client-9.4.8.v20171121.jar;..\libs\jetty-http-9.4.8.v20171121.jar;..\libs\jetty-io-9.4.8.v20171121.jar;..\libs\jetty-util-9.4.8.v20171121.jar;..\libs\jetty-xml-9.4.8.v20171121.jar;..\libs\neko-htmlunit-2.28.jar;..\libs\sac-1.3.jar;..\libs\serializer-2.7.2.jar;..\libs\websocket-api-9.4.8.v20171121.jar;..\libs\websocket-client-9.4.8.v20171121.jar;..\libs\websocket-common-9.4.8.v20171121.jar;..\libs\xalan-2.7.2.jar;..\libs\xercesImpl-2.11.0.jar;..\libs\xml-apis-1.4.01.jar Crawler %url% %keyword% > temp.txt
set /p result=<temp.txt
del temp.txt
if "%result%"=="Updated" msg * Updated

脚本中的url和keyword就是要检查的页面地址和关键字。

相关文章

  • 自动检查内容是否更新

    小孩马上要上幼儿园了,想第一时间获取相关的信息,又不想隔三差五的去打开网页看,这类简单重复的任务最好让适合让电脑来...

  • HA集群修复及openssh/openssl

    验证新疆: 登录新疆承载网浮动IP 注意: 图片内容只是演示 检查进程是否自动拉起 注意: 图片内容只是演示 检查...

  • ionic2实现APP自动更新

    app版本更新可以在应用的设置里面检查版本进行更新或者进入app后自动检查更新。我这里实现的是自动检查更新。 第一...

  • Android Studio提高编译速度的方法

    Android Studio编译速度有时候是非常慢的,每次会自动检查依赖的库文件是否更新,受制于国内网络和翻墙更新...

  • app必备功能

    本机号码一键登录 自动检查更新 离线推送 分享app内容 免邀请码确认用户关系

  • 定时获取文件对比内容执行不同操作

    私有化项目 客户环境自动版本对比执行是否更新操作cust 内容为时间戳:例子 20210305

  • python检查文件是否更新

    https://www.cnblogs.com/mmix2009/p/3229679.html

  • Android 检查第三方库依赖更新

    1.检查依赖更新 直达链接 2.检查依赖更新并自动替换当前依赖版本为最新版本 直达链接

  • 日更达人挑战失败~

    嘿! 前段时间简书app接受检查后我就没登录简书了。反正接受检查期间也是给我算的自动更新,想着要是没自动更新了那也...

  • Android自动更新的实现

    Android自动更新的实现 需求: 在我们开发App的过程中,总会遇到这样的需求。在App运行时检查是否有新版本...

网友评论

      本文标题:自动检查内容是否更新

      本文链接:https://www.haomeiwen.com/subject/sfdhfftx.html