寫爬蟲不是撈回來就行,還有一系列整理的功夫。

其中 PHP 使用 DOMDocument 也是比較好的解法! 這幾天再把爬回來的 HTML 片段資料做屬性置換時發生一些問題,又以下面這個問題最離奇!

一段 <p><img src="...">...</p>.... 結構的字串,一載入到 DOMDocument 方法後輸出就只剩第一張圖片結構。其他內容皆消失。

怎麼樣都沒有找到解決辦法後嘗試補上 <div>...</div> 標籤就沒事了,實在太詭異!

附上處理過程中寫的範例程式碼片段:

function img_url_encode($content = '') {
    $doc = new DOMDocument();
    $doc->loadHTML(mb_convert_encoding("<div>{$content}</div>", 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $tags = $doc->getElementsByTagName('img');
    foreach ($tags as $tag) {
        $src = explode('/', $tag->getAttribute('src'));
        $new_src = array();
        for ($i = 0; $i < count($src); $i++) {
            if ($i == 0) {
                $new_src[] = $src[$i];
            } else {
                $new_src[] = urlencode($src[$i]);
            }
        }
        $tag->setAttribute('src', join('/', $new_src));
    }
    return mb_convert_encoding($doc->saveHTML(), 'UTF-8', 'HTML-ENTITIES');
}

用來將組合出的 IMG 標籤字串中,src 屬性值轉換為連結編碼避免載入圖片異常。

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *