2013-10-21 65 views
-1

我需要抓取幾個網站。問題是 - 我錯了嗎? - 大多數抓取工具只是檢查網站中的鏈接,但不抓取動態鏈接。換句話說,從數據庫生成的頁面(即URL包含帶'?'的查詢)將不會被抓取。如何抓取服務器端動態生成的頁面

你知道一個履帶傳單可以完成這份任務嗎?我在這裏搜索過,發現只有關於抓取JavaScript生成的內容的答案,這不是我想要的。

順便說一句我使用Java。

回答

0

當然可以抓取動態生成的URL。據谷歌稱,他們是能夠掃描動態網址,因此該技術肯定是存在的:http://googlewebmastercentral.blogspot.co.uk/2008/09/dynamic-urls-vs-static-urls.html

您可以輕鬆地驗證這一點,做一個動態URL的wget的,即http://mysite.com/?page=2

然而,複雜性出現時您的抓取工具必須處理會話ID和Cookie以及在鼠標懸停或其他動態功能上顯示內容的頁面。我可以想象一個像Gmail或Facebook這樣的網站難以抓取,然後舉例說維基百科。

實質上,如果您可以通過執行wget將頁面下載到您的硬盤,也可以使用Java將頁面保存到文本文件中,然後解析其中的字符串內容。

看看crawler4j,作爲一個很好的起點。如果它太複雜,寫你自己的java代碼來做到這一點。

import java.net.*; 
import java.io.*; 

public class URLReader { 
    public static void main(String[] args) throws Exception { 

     URL oracle = new URL("http://www.oracle.com/"); 
     BufferedReader in = new BufferedReader(
     new InputStreamReader(oracle.openStream())); 

     String inputLine; 
     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 
    } 
} 

來自:http://docs.oracle.com/javase/tutorial/networking/urls/readingURL.html

那麼這個頁面可以被解析(我傾向於找到了wget/SED/AWK/perl的速度更快了這一點)使用Java的字符串操作方法。

+0

此代碼正在工作..但它不爬行..它只檢索javascript/css文件..我們要求抓取動態網頁內容.. – BasK

0

我認爲你誤解了動態生成的含義。在爬蟲看到它的時候,服務器端生成的任何內容都不是動態的。其中有?的網址並不特殊。您正在使用的抓取工具軟件可能會忽略包含問號的網址的鏈接,但這可能只是爲了避免無限抓取網頁。風險是任何動態生成的內容可能沒有有限數量的頁面。當然,許多Web開發框架根本不使用查詢參數來生成內容服務器端。此內容對於任何抓取工具都是動態且透明的。同樣,您仍然會遇到潛在抓取無限動態生成頁面的問題,但是要檢測您是否抓取無限網站並不容易。確定您是否應該在動態生成的網站上保留一組網頁的抓取鏈接實際上等同於halting problem

現在可以明確地說你都不在爬行的Javascript感興趣,但JavaScript是真的有要儘可能的客戶來講動態內容的唯一途徑。