5

我正在开展一个项目,该项目要求我使用加拿大边境巡逻队在其网站上提供的边境等待时间信息来构建等待时间分布的可视化表示。

我试图找到一种方法让 Java 脚本定期检查网站,并在几个不同的边境站(不是全部)提取信息。我想我会使用 XPath 来获取特定站点,但是如何定期加载网页?

(PS 我知道他们现在也有 Twitter 帐户,但他们每天更新一次,更具体地说,我想学习如何使用网站和 XPATH)

4

4 回答 4

4

使用 Java 中的 URL。创建 URL,然后使用其方法 .openConnection() 开始从网站读取。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;


public class webVisitor {


    public static void main(String[] args) {

        URL url;

        try {

            url = new URL("http://seinfeldaudio.com");
            URLConnection conn = url.openConnection();

            BufferedReader buffRead = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            String inputLine = "";

            while (inputLine != null){
                inputLine = buffRead.readLine();
                System.out.println(inputLine);
            }


        }
        catch (Exception e){

        }

    }

}

更多信息在这里:http ://www.mkyong.com/java/how-to-get-url-content-in-java/

于 2013-02-28T00:34:48.437 回答
4

好的,我今天在工作上有一点时间,想给你一个帮助,然后写给你。对不起,这是我第一次解析网站时出现任何错误,我做了一些研究并决定为此使用 jSoup。

好的,这段代码将解析表格并用值系统出 3 列,您可以更改代码并根据需要构建它:)

你必须下载 jsoup jar下载 jSoup

import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; /** * */ public class ParseWithJsoup{ public static void main(String[] args) { URL url; try { url = new URL("http://www.cbsa-asfc.gc.ca/bwt-taf/menu-eng.html"); URLConnection conn = url.openConnection(); BufferedReader buffRead = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer buffer = new StringBuffer(""); String inputLine = ""; // Append the site in a buffer while (inputLine != null){ inputLine = buffRead.readLine(); buffer.append(inputLine); } Document doc = Jsoup.parse(buffer.toString()); // Parse the table Element table = doc.select("table[class=bwt]").first(); //Office elements iterator Iterator<Element> officeElements = table.select("td[headers=Office]").iterator(); //Commercial Flow iterator Iterator<Element> comElements = table.select("td[headers=Com ComCanada]").iterator(); //Travellers Flow iterator Iterator<Element> travElements = table.select("td[headers=Trav TravCanada]").iterator(); // Iterate all elements through first element row for all columns while(officeElements.hasNext()){ System.out.println("Office: " + officeElements.next().text()); System.out.println("Commercial Flow: " + comElements.next().text()); System.out.println("Travellers Flow: " + travElements.next().text()); } } catch (Exception e){ System.out.println("Exc:"+e.getMessage()); } } }

`

于 2013-02-28T10:16:00.017 回答
0

看起来像 Ajax 使用setInterval("function()",x)

参考这个问题 -重复 jQuery ajax 调用

我还没来得及学习node.js但这看起来很适合它

于 2013-02-13T05:36:39.993 回答
0

使用DWR (Easy Ajax for Java),通过将时间间隔设置为从您的 java 脚本调用 DWR 方法

setInterval(DWR function here , millisec, lang)

在 Java 方法中,使用 java.net.URL 类根据需要读取和解析内容。

于 2013-03-06T16:12:46.807 回答