Linux抓取網頁,簡單方法是直接通過 curl 或 wget 兩種命令。
curl 和 wget 命令,目前已經支持Linux和Windows平臺,後續將介紹。
curl 和 wget支持協議
curl 支持 http,https,ftp,ftps,scp,telnet等網絡協議,詳見手冊 man curl
wget支持 http,https,ftp網絡協議,詳見手冊man wgetcurl 和 wget下載安裝
1、Ubuntu平臺wget 命令安裝: sudo apt-get install wget (普通用戶登錄,需輸入密碼; root賬戶登錄,無需輸入密碼)
curl 命令安裝: sudo apt-get install curl (同 wget)2、Windows平臺
wget 下載地址:wget for Windows
curl 下載地址:curl Downloadwget 和 curl 打包下載地址:Windows平臺下的wget和curl工具包
Windows平臺下,curl下載解壓後,直接是curl.exe格式,拷貝到系統命令目錄下 C:\Windows\System32 即可
Windows平臺下,wget下載解壓後,是wget-1.11.4-1-setup.exe格式,需要安裝;安裝後,在環境變量 - 系統變量 - Path 中添加其安裝目錄即可
curl 和 wget抓取實例
抓取網頁,主要有url 網址和proxy代理兩種方式,下面以抓取“百度”首頁爲例,分別介紹
1、 url 網址方式抓取
(1)curl下載百度首頁內容,保存在baidu_html文件中
curl http://www.baidu.com/ -o baidu_html
(2)wget下載百度首頁內容,保存在baidu_html文件中
wget http://www.baidu.com/ -O baidu_html2
有的時候,由於網速/數據丟包/服務器宕機/等原因,導致暫時無法成功下載網頁
這時,可能就需要多次嘗試發送連接,請求服務器的響應;如果多次仍無響應,則可以確認服務器出問題了
(1)curl多次嘗試連接
curl --retry 10 --retry-delay 60 --retry-max-time 60 http://www.baidu.com/ -o baidu_html
注: --retry表示重試次數; --retry-delay表示兩次重試之間的時間間隔(秒爲單位); --retry-max-time表示在此最大時間內只容許重試一次(一般與--retry-delay相同)
(2)wget多次嘗試連接
wget -t 10 -w 60 -T 30 http://www.baidu.com/ -O baidu_html2
注:-t(--tries)表示重試次數; -w表示兩次重試之間的時間間隔(秒爲單位); -T表示連接超時時間,如果超時則連接不成功,繼續嘗試下一次連接
附: curl 判斷服務器是否響應,還可以通過一段時間內下載獲取的字節量來間接判斷,命令格式如下:
curl -y 60 -Y 1 -m 60 http://www.baidu.com/ -o baidu_html
注:-y表示測試網速的時間; -Y表示-y這段時間下載的字節量(byte爲單位); -m表示容許請求連接的最大時間,超過則連接自動斷掉放棄連接
2、 proxy代理方式抓取
proxy代理下載,是通過連接一臺中間服務器間接下載url網頁的過程,不是url直接連接網站服務器下載
兩個著名的免費代理網站:
freeproxylists.net(全球數十個國家的免費代理,每日都更新)
xroxy.com(通過設置端口類型、代理類型、國家名稱進行篩選)
在freeproxylists.net網站,選擇一臺中國的免費代理服務器爲例,來介紹proxy代理抓取網頁:
218.107.21.252:8080(ip爲218.107.21.252;port爲8080,中間以冒號“:”隔開,組成一個套接字)
(1)curl 通過代理抓取百度首頁
curl -x 218.107.21.252:8080 -o aaaaa http://www.baidu.com(port 常見有80,8080,8086,8888,3128等,默認爲80)
注:-x表示代理服務器(ip:port),即curl先連接到代理服務器218.107.21.252:8080,然後再通過218.107.21.252:8080下載百度首頁,最後218.107.21.252:8080把下載的百度首頁傳給curl至本地(curl不是直接連接百度服務器下載首頁的,而是通過一箇中介代理來完成)
(2)wget 通過代理抓取百度首頁
wget通過代理下載,跟curl不太一樣,需要首先設置代理服務器的http_proxy=ip:port
以ubuntu爲例,在當前用戶目錄(cd ~),新建一個wget配置文件(.wgetrc),輸入代理配置:
http_proxy=218.107.21.252:8080
然後再輸入wget抓取網頁的命令:
wget http://www.baidu.com -O baidu_html2
代理下載截圖:
=======================
抓取的百度首頁數據(截圖):
其它命令參數用法,同url網址方式,在此不再贅述
ftp協議、迭代子目錄等更多的curl 和 wget用法,可以man查看幫助手冊