使用JSoup进行屏幕刮擦

时间:2013-12-13 08:29:15

标签: java web-scraping jsoup

我希望通过网页抓取从此网站获取数据。 http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx

enter image description here

之前我使用过JSoup来获取更多静态HTML网站,但是这个更加困难,因为在我获取网站上的HTML表之前必须单击一个按钮,我不知道是否可以使用JSoup来操作按钮

单击此按钮后,我得到一个HTML表格,我想只获取数据是Barge的数据。

感谢您提示使用Firefox,现在我有了一些其他页面信息。你能告诉我怎样才能获得表格信息?我得到的输出如下:

enter image description here

3 个答案:

答案 0 :(得分:3)

您必须使用Selenium HTML单元驱动程序。

Selenium Info

Maven/Download Binary JAR

HTML Unit Driver

这是完整的工作example。它会访问websiteclick按钮,然后您就可以从该页面获取data

编辑:仅获取表格值

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class GetData {

    public static void main(String args[]) throws InterruptedException {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx");
        Thread.sleep(5000);
        // select barge
        new Select(driver.findElement(By.id("ctl00_ctl15_g_ce17bd4b_3803_47f6_822a_2b8dd10fc67d_ctl00_dlModality"))).selectByVisibleText("Barge");
        // click button
        Thread.sleep(3000);
        driver.findElement(By.className("button80")).click();
        Thread.sleep(5000);

        //get only table text
        WebElement findElement = driver.findElement(By.className("grid-view"));
        String htmlTableText = findElement.getText();
        // do whatever you want now, These are raw table values.
        System.out.println(htmlTableText);

        driver.close();
        driver.quit();    
    }
}

答案 1 :(得分:2)

每次“点击”(或该类型的任何交互)都是对服务器的请求和对浏览器的响应。因此,一个可能的解决方案是不要将JSoup用于初始页面,而是用于结果页面。例如,打开返回表的页面的POST,传递负责返回模态Barge的参数。您可以使用Firebug(适用于Firefox)或Chrome开发者工具等工具来检查对话(请求/响应),以便您可以使用自己的代码进行模拟。

答案 2 :(得分:0)

也许java的浏览器模拟器对你的问题很有用 - 请考虑这个 - HtmlUnit。

  

它为HTML文档建模并提供允许您调用的API   页面,填写表格,点击链接等...就像你在你的   “普通”浏览器。

HTMLUnit