从VB.net的网站中选择特定的元素(WebScraping)

时间:2016-01-10 21:19:03

标签: vb.net web-scraping

我找到了一个网站,我可以在丹麦查找车辆检查。我需要从页面中提取一些信息并循环浏览一系列牌照。让我们以这辆车为例:http://selvbetjening.trafikstyrelsen.dk/Sider/resultater.aspx?Reg=as87640

在左侧表格中,您可以看到有关车辆的一些基本信息。在右侧,您可以看到此特定车辆的检查列表。我需要一个脚本,可以检查汽车是否有任何检查,然后获取每个检查报告的链接。让我们从示例中进行第一次检查。我想从每次检查中提取onclick文本。

第一个检查链接是: 的 location.href = “/ Sider的/ synsrapport.aspx检验= 18014439&安培; VIN = VF7X1REVF72378327”

或者如果您可以立即从URL中提取检查ID和Vin变量:

检验ID: 18014439

Vin: VF7X1REVF72378327

以下是尚未进行任何检查的汽车示例,如果您想查看其外观:http://selvbetjening.trafikstyrelsen.dk/Sider/resultater.aspx?Reg=as87400

当前解决方案计划:

  1. 在VB.net中将HTML源代码下载为String

  2. 搜索字符串并提取特定部分。

  3. 将其存储在StringBuilder中并将其上传到我的SQL服务器

  4. 这是最有效的方式,还是您知道用于从VB.net中的网站特定提取元素的任何库!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Java库HtmlUnit或Jsoup来对网页进行网页抓取。 以下是使用HtmlUnit的示例:

    LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");

    java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
    java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);

    WebClient client = new WebClient(BrowserVersion.CHROME);
    client.getOptions().setJavaScriptEnabled(true);
    client.getOptions().setThrowExceptionOnScriptError(false);
    client.getOptions().setThrowExceptionOnFailingStatusCode(false);

    HtmlPage page = client.getPage("http://selvbetjening.trafikstyrelsen.dk/Sider/resultater.aspx?Reg=as87640");
    HtmlTable inspectionsTable = (HtmlTable) page.getElementById("tblInspections");

    Map<String, String> inspections = new HashMap<String, String>();
    for (HtmlTableRow row: inspectionsTable.getRows()) {
        String[] splitRow = row.getAttribute("onclick").split("=");

        if (splitRow.length >= 4) {
            String id = splitRow[2].split("&")[0];
            String vin = splitRow[3].replace("\"", "");

            inspections.put(id, vin);
            System.out.println(id + " " + vin);
        }
    }