『壹』 使用php的cURL庫進行網頁抓取
使用模明仿PHP的cURL庫可以簡單和有效地去抓網頁 你只需要運行一個腳本 然後分析一下你所抓取的網頁 然後就可以以程序的方式得到你想要的數據了 無論是你想從從一個鏈接上取部分數據 或是取一個XML文件並把其導入資料庫 那怕就是簡單的獲取網頁內容 cURL 是一個功能強大的PHP庫 本文主要講述如果使用這個PHP庫
啟用 cURL 設置
首先 我們得先要確定我們的PHP是否開啟了這個庫 你可以通過使用php_info()函數來得到這一信息
﹤?phpphpinfo();?﹥
如果你可以在網頁上看到下面的輸出 那麼表示cURL庫已被開啟
如果你看到的話 那麼你需要設置你的PHP並開啟這個庫 如果你是在Windows平台下 那麼非常簡單 你需要改一改你的php ini文件的設置 找到php_curl dll 並取消前面的分號注釋就行了 如下所示
//取消下在的注釋extension=php_curl dll
如果你旦纖是在Linux下面 那麼 你需要重新編譯你的PHP了 編輯時 你需要打開編譯參數——在configure命令上加上 –with curl 參數
一個小示例
如果一切就緒 下面是一個小常式
﹤?php// 初始化一個 cURL 對象$curl = curl_init();
// 設置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );
// 設置headercurl_setopt($curl CURLOPT_HEADER );
// 設置cURL 參數 要求結果保存到字元串中還是輸出到屏幕上槐鏈 curl_setopt($curl CURLOPT_RETURNTRANSFER );
// 運行cURL 請求網頁$data = curl_exec($curl);
// 關閉URL請求curl_close($curl);
// 顯示獲得的數據var_mp($data);
如何POST數據
上面是抓取網頁的代碼 下面則是向某個網頁POST數據 假設我們有一個處理表單的網址// example /sendSMS php 其可以接受兩個表單域 一個是電話號碼 一個是簡訊內容
﹤?php$phoneNumber = ;$message = This message was generated by curl and php ;$curlPost = pNUMBER= urlencode($phoneNumber) &MESSAGE= urlencode($message) &SUBMIT=Send ;$ch = curl_init();curl_setopt($ch CURLOPT_URL // example /sendSMS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥
從上面的程序我們可以看到 使用CURLOPT_POST設置HTTP協議的POST方法 而不是GET方法 然後以CURLOPT_POSTFIELDS設置POST的數據
關於代理伺服器
下面是一個如何使用代理伺服器的示例 請注意其中高亮的代碼 代碼很簡單 我就不用多說了
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy : );curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥ 關於SSL和Cookie
關於SSL也就是HTTPS協議 你只需要把CURLOPT_URL連接中的//變成//就可以了 當然 還有一個參數叫CURLOPT_SSL_VERIFYHOST可以設置為驗證站點
關於Cookie 你需要了解下面三個參數
CURLOPT_COOKIE 在當面的會話中設置一個cookie
CURLOPT_COOKIEJAR 當會話結束的時候保存一個Cookie
CURLOPT_COOKIEFILE Cookie的文件
HTTP伺服器認證
最後 我們來看一看HTTP伺服器認證的情況
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD [username]:[password] )
$data = curl_exec();curl_close($ch);?﹥
關於其它更多的內容 請參看相關的cURL手冊 lishixin/Article/program/PHP/201311/21491
『貳』 網頁需要登錄,怎樣抓取其內容
網站登錄/認證有多種方式,要抽取/提取需要登錄的網頁內容,需要實現有針對性的網頁抓取軟體模塊:
1,HTTPS
2,HTTP Digest
3,HTTP Basic
4,使用網頁Form
其中,前三種是通信協議層面的,如果使用PHP,Python,javascript, Java等語言編程,一般需要控制HTTP通信做相應的動作;而第四種是應用層面的,只需要模擬用戶填寫Form然後提交即可,相對容易一些。另外,還要考慮伺服器是否推送cookie以及會話控制等等,所以,要自己編程把所有的都實現了是一個很大的挑戰,但是,如果利用瀏覽器平台能力,這個就好解決了,例如,利用Firefox的安全管理器,網站認證都委託給Firefox,只需要編寫應用邏輯代碼即可。網頁抓取/數據抽取/信息提取軟體工具包MetaSeeker就是採用了這種方案,用統一的方法實現所有方式的認證,一種最簡單的操作方法:先訪問一次目標頁面,認證通過後安全信息都記錄在安全伺服器上,後續的抓取工作就像針對不需要認證的頁面一樣,當然,這個第一次認證操作可以用程序自動完成。
MetaSeeker工具包是免費使用的,下載地址: http://www.gooseeker.com
『叄』 軟體推薦丨GoldDataSpider —— 網頁數據抽取工具
GoldDataSpider 是用於抓取網頁和抽取數據的工具。其核心代碼是從金色數據抓取融合平台分離而來。
該項目提供抓取和抽取來自網頁數據,不僅可以抽取網頁內的內容,還能抽取URL、HTTP報頭、Cookie里的數據。
該項目定義了一種簡潔、靈活、敏捷的結構或者說是規則語法。極盡其所能將網頁內容、HTTP報頭、Cookie、甚至關聯其它網頁、其它網站數據,抽取出有意義有價值數據欄位,組成一條數據記錄。除此之外,還能內嵌http請求,以補充數據欄位,比如某些欄位需要向詞典提供翻譯這樣的欄位等等。
該項目還可支持從各種類型文檔抽取數據,比如html/xml/json/javascript/text等。
我們還提供了規則可視化配製,請下載採集數量不受限、爬蟲數量不受限、導出數據數量不受限的完全免費金色數據平台社區版 。以及詳盡的文檔
使用入門
首先,我們需要將依賴加入項目當中,如下:
1、對於maven項目
2、對於gradle項目
然後你將可以使用該依賴所提供的簡潔清晰的API,如下:
運行上面的測試,你將可以看類似下野鄭面的輸出:
當作Service或者API使用
你可以在項目中,可以當作調用服務和API使用。例如如下:
對於可視化配製,可以參考免費社區版文檔。以下就免費社區版做簡單介紹 ,詳情見官網!
免費社區版:
開源/免費
讓用戶更好理解和使用產品
我們針對數據採集免費,還開放和維護核心的開源代碼項目。讓用戶可以更好的使用、理解採集,用好採集。 讓用戶在各種場景應用金色數據採集帶來的便利,我們有信心讓客戶見到一個開放的數據平台,讓用戶放心/省心/省力。
自由/靈活
透出一股強大的採集核心
我們的採集器,將向用戶暴露一切目標數據,除了常規網頁內容,還有如URL、HTTP報頭、Cookie等。還提供了各種解析工具和函數,讓用戶不僅能得到網頁內容里的數據,還能得到URL、HTTP報頭、Cookie里隱藏的核心數據,還能稿租靈活做到智能防封。
分布式採集
私有雲,更靈活,更安全,更放心
可以根據自身需求,隨意部署採集器數量,7*24小時不間斷運行,採集後端集中靈活控制。可自由指揮數據在哪個採集器採集。可定義定時採集,無需人員值守。
數據可關聯可追蹤
恢復/重建數據內在與外在價值
可以讓每條數據隨著目標網站目鍵脊兆標內容更新(如商品價格)、而更新用戶應用表該條數據相關欄位內容。
非侵入式融合
融合從未如此現實和簡單
完全可以在不改變用戶應用表結構(增刪改表列),而將採集數據融入到應用表中。
自動化/一體化
無需人力操作,即抓即用
不只是採集可以自動化抓取,融合也提供了手動化和強大自動化功能。還將採集與融合操作無縫對接,可將目標數據抓一條融合一條,實時流向應用表,做到即抓即用!
點擊下方鏈接,獲取軟體下載地址↓↓↓
GoldDataSpider首頁、文檔和下載 - 網頁數據抽取工具 - 開源中國
『肆』 php獲取指定網頁內容
此類方法一共有三種
第一種方法
<?php
$c = curl_init();
$url = 'www.badcatxt.com';
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($c);
curl_close($c);
$pos = strpos($data,'utf-8');
if($pos===false){$data = iconv("gbk","utf-8",$data);}
preg_match("/<title>(.*)</title>/i",$data, $title);
echo $title[1];
?>
第二種方法:使用file()函數
<?php
$lines_array = file('http://www.badcatxt.com/');
$lines_string = implode('', $lines_array);
$pos = strpos($lines_string,'utf-8');
if($pos===false){$lines_string = iconv("gbk","utf-8",$lines_string);}
eregi("<title>(.*)</title>", $lines_string, $title);
echo $title[1];
?>
第三種方法:使用file_get_contents
<?php
$content=file_get_contents("http://www.badcatxt.com/");
$pos = strpos($content,'utf-8');
if($pos===false){$content = iconv("gbk","utf-8",$content);}
$postb=strpos($content,'<title>')+7;
$poste=strpos($content,'</title>');
$length=$poste-$postb;
echo substr($content,$postb,$length);
?>
『伍』 PHP怎樣抓取網頁代碼中動態顯示的數據
你是想抓別人網頁上ajax動態載入的數據吧?
1、要找到它的ajax載入的URL地址
2、利用PHP的file_get_contents($url)函數讀取那個url地址。
3、對抓取到的內容進行分析或正則過濾。
『陸』 怎麼用phpquery抓取網頁實時數據使用CI框架
phpquery和框架並無關系,我現在也是用CI的
先將pq引入進來
$content = file_get_content('https://personalbank.cib.com.cn/pers/main/pubinfo/ifxQuotationQuery.do');
phpQuery::newDocumentHTML($content);
$containers = pq("xxxx");就可以了,但你要抓取這個網站數據,他數據是js載入的,所以你只需要
$content = file_get_content('https://personalbank.cib.com.cn/pers/main/pubinfo/ifxQuotationQuery!list.do?_search=false&dataSet.nd=1440145968553&dataSet.rows=100&dataSet.page=1&dataSet.sidx=&dataSet.sord=asc');這個地址返回是json數據,你直接json_decode()就OK