簡體   English   中英

從網頁獲取數據(抓屏)

[英]Getting data from a webpage (screenscraping)

有人可以給我一個關於屏幕抓取的好教程。 我有一個網頁可供我的大學上載每個課程的所有數據。 為了進入其站點的主頁,有一個帶有登錄按鈕的輸入屏幕。 按下時,將彈出一個浮動對話框,詢問用戶名和密碼。 然后直接進入主頁。 我不知道它在哪里請求授權,我希望能夠以編程方式從該站點獲取數據。 我需要的數據是通過更多具有登錄名的屏幕顯示的,但是如果我可以使用我的ID和密碼通過第一個屏幕,我會很高興的。 最好我想在Java中使用,但是任何語言都可以

這聽起來好像登錄對話框不是原始頁面的一部分,而是由某些JavaScript動態構建的,可能是通過Ajax調用。

您將需要某種無頭瀏覽器,該瀏覽器支持javaScript和Ajax。

從簡介中了解HtmlUnit (http://htmlunit.sourceforge.net/):

HtmlUnit是“用於Java程序的無GUI瀏覽器”。 它為HTML文檔建模,並提供一個API,使您可以調用頁面,填寫表單,單擊鏈接等,就像在“常規”瀏覽器中一樣。

它具有相當好的JavaScript支持(正在不斷改進),並且即使在非常復雜的AJAX庫中也可以工作,根據您要使用的配置模擬Firefox或Internet Explorer。

編輯:這是一個示例:

我注意到您要掃描的頁面(http://qub.ac.uk/qol/)使用基本身份驗證,因此不會彈出某種HTML輸入形式,而是一個瀏覽器對話框。 當您在開始頁面上按“登錄”按鈕時,將加載一個頁面https://qub.ac.uk/qol/ ,以此方式進行保護。

對於測試,我僅向您展示如何使用HtmlUnit從不安全的http://qub.ac.uk/qol/頁面獲取標題,因為,當然,我無法訪問這些秘密部分。

我認為,應該大致了解它是如何工作的。 有關如何使用HtmlUnit API的更多詳細信息,請查閱網絡上的出色文檔和其他資源。

package test;

import java.io.IOException;
import java.net.MalformedURLException;

import javax.xml.bind.DatatypeConverter;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class Scraper {

    public static void main(String[] args)
            throws FailingHttpStatusCodeException, MalformedURLException,
            IOException {
        WebClient webClient = new WebClient();

        String username = "user";
        String password = "pw";
        String authString = username + ":" + password;
        String authEncoded = DatatypeConverter.printBase64Binary(authString
                .getBytes());

        webClient.addRequestHeader("Authorization", "Basic " + authEncoded);

        HtmlPage page = webClient.getPage("http://qub.ac.uk/qol/");
        // System.out.println(page.asXml());
        DomNodeList<DomElement> headings = page.getElementsByTagName("h3");
        for (DomElement e : headings) {
            System.out.println("Got heading: " + e.getTextContent());
        }

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM