curl()、file_get_contents()、snoopy.class.php這三個遠程頁面抓取或採集中用到的工具,他們功能至關,到底有什麼優缺點呢,下面逐一介紹: php
snoopy.class.php 瀏覽器
snoopy 是用 fsockopen 自開發的一個類,效率比較高且不須要服務器特定配置支持,在普通虛擬主機中便可使用,可是常常出問題。官方網址:http://sourceforge.net/projects
Snoopy是一個php類,用來模擬瀏覽器的功能,能夠獲取網頁內容,發送表單。
Snoopy的特色:
一、抓取網頁的內容 fetch
二、抓取網頁的文本內容 (去除HTML標籤) fetchtext
三、抓取網頁的連接,表單 fetchlinks fetchform
四、支持代理主機
五、支持基本的用戶名/密碼驗證
六、支持設置 user_agent, referer(來路), cookies 和 header content(頭文件)
七、支持瀏覽器重定向,並能控制重定向深度
八、能把網頁中的連接擴展成高質量的url(默認)
九、提交數據而且獲取返回值
十、支持跟蹤HTML框架
十一、支持重定向的時候傳遞cookies
要求php4以上就能夠了,因爲自己是php一個類,無需擴支持,服務器不支持curl時候的最好選擇。 服務器
file_get_contents() cookie
file_get_contents 是 fsockopen 功能的簡單打包,效率稍低些,可是抓取成功率很高,因此在 snoopy 出問題的時候我通常那他來。5.0.0 添加了對 context 的支持,有了context,他也能夠發送 header 信息,自定義用戶 agent, referer, cookies 都不在話下。5.1.0 添加了 offset 和 maxlen 參數,能夠只讀文件的一部份內容。 多線程
curl() 框架
功能最強大,幾乎能夠模擬瀏覽器的各個方面,幾乎能夠以假亂真。效率也很高,支持多線程,不過須要開啓下 curl 擴展。 curl
cURL是一個利用URL語法規定來傳輸文件和數據的工具,支持不少協議,如HTTP、FTP、TELNET等。PHP也支持cURL庫,咱們經常用來遠程頁面抓取和採集。
一些CMS會使用curl函數,這就須要在服務器開啓CURL擴展,下面介紹具體的方法:
一、將PHP的ext目錄下的三個文件:php_curl.dll、libeay32.dll和ssleay32.dll複製到系統system32目錄中。
二、將php.ini中的
;extension=php_curl.dll 前面的分號去掉
三、重啓IIS或Apache
四、測試代碼
<?php
//初始化
$ch = curl_init();
//設置選項,包括URL
curl_setopt($ch,CURLOPT_URL,"www.abc.net");
curl_setopt($ch,CURLOPT_HEADER,1);
curl_exec($ch);
curl_close($ch);
?> 函數