在php中我們可以通過編寫curl來實現採集的功能,先分析需要採集的資料的**的特點,加入到我們的curl的屬性中來,實現我們定製採集的功能,最終得到我們需要的結果。
curl的使用
preg_match_all
array_filter
explode
php中建立curl請求的基本步驟
1 . 建立乙個新curl資源: $curl = curl_init ()
2 . 設定url和相應的選項: curl_setopt ($curl,option,value)
常用引數:
curlopt_header: 如果你想把乙個頭包含在輸出中,設定這個選項為乙個非零值。
curlopt_url: 這是你想用php取回的url位址。你也可以在用curl_init()函式初始化時設定這個選項。
curlopt_returntransfer:如果成功只將結果返回,不自動輸出任何內容。
curlopt_ssl_verifyhost:禁用ssl證書的驗證
curlopt_ssl_verifypeer: 禁用ssl證書的驗證
3 . 抓取 url 並把它傳遞給瀏覽器:$output = curl_exec ($curl)
4 . 關閉 curl 資源,並且釋放系統資源:curl_close ( $ch )
三、開發準備
首先要檢視當前php環境是否支援curl.
建立並切換到code目錄
//建立code目錄
sudo mkdir /home/code
//修改code目錄許可權
sudo chmod -r 777 /home/code
//切換到code目錄
cd /home/code
//在此目錄啟動php內建伺服器
sudo php -s localhost:80
<?php
phpinfo();
?>
頁面上搜尋curl,如下圖是支援curl。
如果不支援的話請修改php.ini中;extension=php_curl.dll前的;去掉,重新啟動php伺服器就可以了。
1 簡單的採集
curl簡單實現獲取乙個**頁面功能
在 /home/code 新建乙個 curltest.php 檔案,抓取實驗樓首頁,並輸出到頁面:
<?php
//1.初始化,建立乙個新curl資源
$curl=curl_init();
//2.設定url和相應的選項,我們採集`頁面
curl_setopt($curl, curlopt_url, "");
//因為實驗樓的位址為https,所以引數為 false 代表不檢查ssl證書
curl_setopt($curl, curlopt_ssl_verifypeer, false);
//如果你想把乙個頭包含在輸出中,設定這個選項為乙個非零值
curl_setopt($curl, curlopt_header, 0);
//3.執行並獲取結果
curl_exec($curl);
//釋放curl
curl_close($curl);
?>
**執行效果如下,頁面展示效果可能會比較亂,因為一些 js 和 css 檔案的引用位址會失效,但是這並不影響我們獲取資料。
實現文字替換
上面實驗只是輸出實驗樓的頁面,我們也可以在輸出的時候把頁面上資料修改,建立curlreplace.php檔案,我們把頁面中的所有的"實驗樓"修改為"我喜歡在實驗樓學習"例子如下。
<?php
//1.初始化,建立乙個新curl資源
$curl=curl_init();
//2.設定url和相應的選項,我們採集`頁面
curl_setopt($curl, curlopt_url, "");
//因為實驗樓的位址為https,所以引數為 false 代表不檢查ssl證書
curl_setopt($curl, curlopt_ssl_verifypeer, false);
//如果你想把乙個頭包含在輸出中,設定這個選項為乙個非零值
curl_setopt($curl, curlopt_header, 0);
// 執行之後不直接列印出來
curl_setopt($curl, curlopt_returntransfer, true);
//3.執行並獲取結果
$resault=curl_exec($curl);
//4.釋放curl
curl_close($curl);
//把頁面中的實驗樓修改為我喜歡在實驗樓學習
echo str_replace("實驗樓","我喜歡在實驗樓學習",$resault);
?>
3.開始頁面採集
本次實驗用來採集實驗樓課程,url位址為courses/.
這個頁面中的課程的和標題,我要採集下來存入資料庫中。
我們檢視這個頁面的原始碼可以看出我們所需要的位址的規律。
檢視源**,我們可以看到課程標題和課程都有固定的格式,我們就可以使用正規表示式把內容匹配出來。
此處為把標題匹配,我們可以使用preg_match_all匹配的陣列是乙個二維陣列。
preg_match_all() 函式用於執行乙個全域性正規表示式匹配
語法://第乙個引數為匹配的正規表示式,第二個為要匹配的字串,第三個為所有匹配結果(陣列)
preg_match_all (pattern, subject, matches)
我們找到樣式為course-title所有span
php使用curl實現模擬登入例項
function login post url,cookie,post function get content url,cookie post array username 使用者名稱 password 密碼 usecookie 0 action login submit 1,cookie coo...
使用curl的簡單例項
a 使用vs新建乙個win32的控制台程式。b 在工程目錄下,新建乙個include的資料夾,將libcurl 7.18.0 win32 msvc include curl這個目錄拷貝到include目錄下。c 專案 屬性 c c 常規 附加包含目錄 新增 include d 在工程目錄下,新建乙個...
php之curl簡單應用
1 什麼是curl且能實現什麼功能?什麼是curl curl php中常用都實現那些功能 1 實現遠端獲取和採集內容23 實現模擬登陸 4 實現介面對接 api 資料傳輸等 5 實現模擬cookie等 2 php 如何使用curl功能 1 整個操作過程中第一步是用cur init 函式進行初始化 2...