可有人請給我屏幕抓取一個很好的教程。我有一個我的大學用來上傳每個班級所有數據的網頁。爲了進入他們的網站的主頁,有一個輸入屏幕,其具有登錄按鈕。當按下它時,會彈出一個詢問用戶名和密碼的浮動對話框。然後它直接進入主頁。我不知道它在請求授權,我希望能夠以編程方式從網站獲取數據。我需要的數據是通過更多的登錄屏幕,但如果我可以通過我的ID和密碼通過這第一個屏幕,我會很高興。最好我想這在Java中,但任何語言都行從網頁(屏幕抓取)獲取數據
回答
這聽起來像是登錄對話框不是原頁面的一部分,但通過一些JavaScript的飛行結構,可能通過Ajax調用。
你所需要的是某種形式的無頭的瀏覽器,支持JavaScript和Ajax。
看一看的HtmlUnit(http://htmlunit.sourceforge.net/),從介紹:
是的HtmlUnit一個 「Java程序圖形界面的瀏覽器」。它模擬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的更多詳細信息,請參閱Web上的優秀文檔和其他資源。
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());
}
}
}
你能解釋我怎麼可以使用這個登錄。我已經添加了外部罐子,並可以使用htmlunit,但我不知道該怎麼做才能實現我想要的。該網站是http://qub.ac.uk/qol – bobjamin
我添加了一個例子,一些提示,我的答案。我希望你會接受這個答案。有關HtmlUnit的更多問題,請參閱文檔並在此處提出一個新問題,如果在其他地方找不到答案。 –
- 1. 網頁抓取/屏幕抓取
- 2. 屏幕從網站抓取數據
- 3. 從網頁抓取屏幕截圖
- 4. 屏幕抓取數據庫
- 5. 延遲後的屏幕抓取網頁
- 6. 使用C#和.NET Framework進行屏幕抓取,網頁抓取,網頁收集,Web數據提取等工作
- 7. 刮屏|網頁抓取
- 8. 屏幕抓取/網頁抓取網址在搜索結果後不會改變
- 9. PHP(屏幕抓取)
- 10. 屏幕抓取Asp.net
- 11. 屏幕抓取和SQL數據庫
- 12. 從「angular.callbacks」網頁抓取數據
- 13. 如何從網頁上抓取數據?
- 14. 從網頁抓取數據到Excel
- 15. 從網站抓取數據
- 16. 從網站抓取數據
- 17. 獲取網頁打印屏幕,php/unix
- 18. 屏幕抓取頁面,做Ajax請求
- 19. 屏幕抓取完全呈現頁面
- 20. 從網頁獲取數據
- 21. 從網頁獲取數據?
- 22. 從網頁獲取數據
- 23. 我該如何屏幕抓取網頁郵件頁面?
- 24. 將「直接」連接到網站數據庫或屏幕抓取
- 25. 如何在網頁抓取時獲取數值數據?
- 26. 使用Python屏幕抓取
- 27. Python的硒屏幕抓取
- 28. Python中的屏幕抓取
- 29. HTMLAgility幫助屏幕抓取
- 30. 經典ASP屏幕抓取
通過編程的方式,你的意思是根本不使用瀏覽器?如果是這種情況,爲什麼你需要「屏幕抓取」?它只會在java中執行嗎? – aaronps
查找頁面中的'form'用來提交登錄請求,得到URL,然後請求URL編程,並得到該Cookie,使用它可以請求與登錄狀態之後的頁面。 – neevek
與aaronps相同的問題,爲什麼你需要刮擦?您是否需要自動化用戶並驗證用戶操作導致的數據? – amjad