簡體   English   中英

在Java中翻錄HTML頁面源的麻煩

[英]Ripping html page source trouble in Java

我正在嘗試翻錄網站的html頁面源以獲取電子郵件。 當我運行開膛手/自卸車或任何您想調用的東西時,它會獲得所有源代碼,但會停在第160行,但是我可以手動轉到網頁>右鍵單擊>單擊查看頁面源代碼,然后解析文本。 整個源代碼略超過200行。 手動轉到每個頁面並單擊右鍵的唯一問題是超過100k頁面,這將需要一段時間。

這是我用來獲取頁面源代碼的代碼:

    public static void main(String[] args) throws IOException, InterruptedException {

    URL url = new URL("http://www.runelocus.com/forums/member.php?102786-wapetdxzdk&tab=aboutme#aboutme");
    URLConnection connection = url.openConnection();

    connection.setDoInput(true);
    InputStream inStream = connection.getInputStream();
    BufferedReader input = new BufferedReader(new InputStreamReader(
            inStream));

    String html = "";
    String line = "";
    while ((line = input.readLine()) != null)
        html += line;
    System.out.println(html);
    }

如果您嘗試抓取HTML頁面的內容,則不應使用這樣的原始連接。 使用現有庫: HTML Unit是一種非常常見的庫。

您傳入URL,它為您提供了一個代表頁面的對象,並且您將所有HTML標記都作為Objects獲得(例如,您獲得了元素的Div對象,元素的HTMLAnchor對象等)。 使用諸如HTML Unit之類的現有框架並閱讀其中的頁面內容,將使您的生活變得更加輕松。

您還可以進行搜索(例如,elementById,elementByTagName,按屬性等),從而可以在給定預定頁面標記的情況下更輕松地在文檔中跳轉。

您還可以根據需要模擬點擊等操作。

我運行了您的代碼,它似乎正在獲取所有HTML,包括HTML結束標記。

您是否認為可能必須登錄網站才能查看更多信息? 在這種情況下,類似tsOverflow用戶的庫可能會有所幫助。

看到這個,我最好的猜測是您的while循環條件不好。 我不熟悉您使用的語法。 請注意,我已經有一段時間沒有使用Java了。 但是我覺得應該讀...

String line = input.readLine();
while(line != null)
{
    html += line; //should use a StringBuilder here for optimization
    line = input.readLine();
}

我確實注意到StringBuilder優化。 另外,我認為使用Scanner類會更容易。

當您打開具有不同字符集的InputStreamReader時,它可能會有所幫助? 查看您提到的頁面,字符集為ISO-8859-1:

BufferedReader input = 
    new BufferedReader(new InputStreamReader(inStream, "ISO-8859-1"));

暫無
暫無

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

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