1. 程式人生 > 實用技巧 >獲取網頁亂碼

獲取網頁亂碼

1.是用curl抓取的資料是用類似gzip壓縮後的資料導致的亂碼。

亂碼:curl www.wode007.com |more
亂碼:curl -H "Accept-Encoding: gzip"www.wode007.com | more
不亂碼:curl -H "Accept-Encoding: gzip"www.wode007.com | gunzip | more

不亂碼:curl www.55wd.com |more
亂碼:curl -H "Accept-Encoding: gzip"www.55wd.com | more
不亂碼:curl -H "Accept-Encoding: gzip"www.55wd.com | gunzip | more

下面的a,b解釋的是www.wode007.com,c,d解釋是的www.55wd.com

a.某個url,如果用不加任何選項的curl命令抓取後亂碼,在curl後面加上Accept-Encoding:gzip,後面不加gunzip,則抓取的資料會亂碼。
b.某個url,如果用不加任何選項的curl命令抓取後亂碼,在curl後面加上Accept-Encoding:gzip,後面加上gunzip,則抓取的資料不會亂碼。
c.某個url,如果用不加任何選項的curl命令抓取後不亂碼,在curl後面加上Accept-Encoding:gzip,後面不加gunzip,則抓取的資料會亂碼。
d.某個url,如果用不加任何選項的curl命令抓取後不亂碼,在curl後面加上Accept-Encoding:gzip,後面加上gunzip,則抓取的資料不會亂碼。

小總:

也就是說在curl後面加上Accept-Encoding:gzip,再用gunzip解壓縮,則基本上可以儲存資料不亂碼。

素材公社https://www.wode007.com/sites/73209.html 愛圖網https://www.wode007.com/sites/73208.html

2.GBK或者UTF8漢字之類的亂碼

iconv命令是運行於linux平臺的檔案編碼裝換工具。當我們在linux系統shell下通過curl命令或者wget命令獲取一個網頁的原始碼,當網頁的編碼與當前作業系統壞境的設定的編碼不同時,就會發現網頁中有很多亂碼。如在網頁"meta"標籤"charset"屬性值設定為"gb2312"的http://www.baidu.com百度首頁,在系統壞境變數"$LANG"值為"en_US.UTF-8"的linux系統即會產生中文亂碼現象。這時我們可以嘗試使用iconv命令進行編碼裝換,讓中文不在是亂碼。如下命令是處理百度在系統壞境變數"$LANG"值為"en_US.UTF-8"的linux系統亂碼的問題的解決方案之一:

curl http://www.baidu.com|iconv -fgb2312 -t utf-8

當然,你也通過改變系統壞境變數與百度首頁的"charset"值一致,也可以解決此亂碼問題,如下命令:

set LANG="gb2312"
export LANG
curl http://www.baidu.com

iconv命令的詳細語法:

iconv [選項..] [檔案..]
選項:
-f 輸入編碼
-t 輸出編碼
-l 列出所有已知的編碼
-o 輸出檔案

對比採用phpCURL庫的POST GETHEADER三種方法之間的差異

比較POST GETHEADER這三種方法的區別:

引數

POST

GET

HEADER

CURLOPT_URL

CURLOPT_POST

開啟

關閉

關閉

CURLOPT_HTTPHEADER

如果有$header,則開啟

如果有$header,則開啟

如果有$header,則開啟

CURLOPT_HEADER

False

False

True

CURLOPT_NOBODY

false

False

true

CURLOPT_POSTFILEDS

True

false

false

從上表中可以看出:

POST方法:開啟POST連線,然後傳送POST報文體。關閉HEADER和NOBODY

GET方法:關閉POST相關的選項,關閉NOBODYHEADER,僅僅只是開啟curlopt_httpheader

HEADER方法:開啟HEADER和NOBODY,關閉POST相關的選項。

應該說上述三種方法,一個明顯的區別是,箱採用什麼方法的時候,就開啟對應的CURL選項。CURL_HTTPHEADER與CUROPT_HEADER的區別:

前者是設定HTTP頭部資訊的一個數組
後者是將標頭檔案的資訊以資料流的方式輸出