使用JSoup进行屏幕爬取

3
我想通过网络爬虫从以下网站获取数据:http://myservices.ect.nl/tracing/objectstatus/Pages/Overview.aspx。我之前使用JSoup来处理更静态的HTML网站,但这个网站比较困难,因为在获取网站上的HTML表格之前,必须点击一个按钮,而我不知道是否可以使用JSoup来操作该按钮。
点击此按钮后,我将获得一个HTML表格,我只想获取运输方式为Barge的数据。
感谢您提供使用Firefox的提示,现在我已经获得了包含一些其他页面信息的表格。您能告诉我如何仅获取表格信息吗?我得到的输出如下所示:
3个回答

3
你需要使用 Selenium HTML Unit Driver 来完成这个任务。

Selenium 信息

Maven/下载二进制 JAR

HTML Unit Driver

以下是完整的工作 示例。它将访问 网站点击按钮,然后您可以从页面中获取 数据

编辑:仅获取表格值

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();    
    }
}

谢谢您提供的代码和回复,我非常感激。但是,使用这段代码我没有得到表格,只得到了页面源代码而已。因为我只想获取修改Barge的HTML表格。谢谢。 - Muratcan
尝试使用FirefoxDriver而不是HtmlUnitDriver,看看是否有效。 - Makky
谢谢你,现在我通过FirefoxDriver使用了HTML表格。但是,你能否请告诉我如何仅获取表格而不是整个页面源代码呢?我放了一张图片来说明我的意思,如果您能向我展示一些方法,我会非常高兴的。谢谢 - Muratcan
亲爱的Makky,你能帮我解决一个问题吗?上面的代码给了我一个表格“grid view”作为字符串,是否可能获取表格HTML格式或类似于<table><tbody><tr>的内容,或者是否可以将Selenium与BeautifulSoup混合使用,例如Element table1 = doc.select("grid-view").first(); 非常感谢! - Muratcan

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

0

或许Java浏览器模拟器对您的问题会有所帮助 - 请考虑使用HtmlUnit。

它可以模拟HTML文档,并提供API,允许您调用页面、填写表单、点击链接等,就像在您的“正常”浏览器中一样。

HTMLUnit


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接