網路機器人(網路蜘蛛),使用 LIB_http.php

透過 HTMLtidy 和 php-Curl 寫成的 LIB_http.php 等函式的函式庫可以協助我們下載網頁到我們的電腦

並且將網頁檔案拉下來到我們電腦的資料作進一步的分析!

把這件事情加強加強再加強,就是 google 做的事情了!(加強:使你的網路機器人無論遇到多麼爛的網頁原始碼都能夠解讀其中關鍵資料)

LIB_http.php 函式可以在這個頁面下載到

http://www.schrenk.com/nostarch/webbots/DSP_download.php

經過實際使用,發現了一個可以加強的地方!

有些網頁的 a 超連結的 href 屬性寫成

href 後面使用單引號而非正規的雙引號,雖然這樣大部分的瀏覽器都可以解讀,但是 LIB_http 函式庫裡面的 LIB_parse.php 的 get_attribute 函式就無法正確讀出屬性了

所以我將 LIB_parse.php 做了修改:如果使用雙引號解讀出來的屬性是空字串,則嘗試使用單引號來解讀。

原本程式碼:

function get_attribute($tag, $attribute)
    {
    # Use Tidy library to 'clean' input
    $cleaned_html = tidy_html($tag);

    # Remove all line feeds from the string
    $cleaned_html = str_replace("r", "", $cleaned_html);
    $cleaned_html = str_replace("n", "", $cleaned_html);

    # Use return_between() to find the properly quoted value for the attribute
    return return_between($cleaned_html, strtoupper($attribute)."="", """, EXCL);
    }

修改後的程式碼:

function get_attribute($tag, $attribute)
    {
    # Use Tidy library to 'clean' input
    $cleaned_html = tidy_html($tag);

    # Remove all line feeds from the string
    $cleaned_html = str_replace("r", "", $cleaned_html);
    $cleaned_html = str_replace("n", "", $cleaned_html);

    # Use return_between() to find the properly quoted value for the attribute
    if( return_between($cleaned_html, strtoupper($attribute)."="", """, EXCL) == "" ){
        return return_between($cleaned_html, strtoupper($attribute)."='", "'", EXCL);
    }
    else{
        return return_between($cleaned_html, strtoupper($attribute)."="", """, EXCL);
    }
    }

針對判斷解讀出來的字串是否為空白字串的部份應該有更好的解法,不過那的重要性其次了…