【问题标题】:Screen Scraping using JSoup使用 JSoup 进行屏幕抓取
【发布时间】:2013-12-31 23:05:38
【问题描述】:

我想通过网络抓取从该网站获取数据。 http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx:

我以前用JSoup做更多的静态HTML网站,但是这个比较难,因为在我得到网站上的HTML表格之前必须点击一个按钮,我不知道是否可以使用JSoup来操作按钮.

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

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

【问题讨论】:

    标签: java web-scraping jsoup


    【解决方案1】:

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

    Selenium Info

    Maven/Download Binary JAR

    HTML Unit Driver

    这里是完整的工作example。它将访问website,click按钮,然后您可以从页面中获取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();    
        }
    }
    

    【讨论】:

    • 谢谢你的代码和你的回复,我真的很感激,但我没有得到这个代码的表格,我得到了没有表格的页面源,因为我想得到的只是 html 表格只能在哪里修改驳船,谢谢。
    • 尝试使用 FirefoxDriver 而不是 HtmlUnitDriver 看看是否可行。
    • 谢谢你,现在我有 html 表格与 FirefoxDriver 一起使用,但你能告诉我如何只获得表格而不是所有页面源,我放一张图片来说明我的意思,我会非常如果你能以某种方式告诉我,我会很高兴。谢谢
    • 亲爱的 Makky 你能帮我解决一些问题吗,上面的代码给我表格“网格视图”作为字符串是可能获得表格 html 格式或类似 或者是否可以将 Selenuim 与汤混合,例如 Element table1 = doc.select("grid-view").first();非常感谢?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      HTMLUnit

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-12
        • 2013-01-12
        • 2017-02-25
        • 2023-03-25
        • 2013-06-01
        • 2013-03-02
        • 1970-01-01
        相关资源
        最近更新 更多