[英]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.