利用curl和正規表示式做的一個針對磨鐵中文網非vip章節的小說抓取器,支援輸入小說ID下載小說。 依賴項:curl 可以簡單的看下,裡面用到了curl ,正規表達式,ajax等技術,適合新手看看。在本地測試,必須保證聯網並且確保php開啟curl的mode.
-
session_start();
- //封裝成類開啟這些自動抓取文章
- #header("Refresh:30;http:/ /www.test.com:8080");
- class SpiderTools{
- /////////////////////////////// ////////////////////////////////////////////////// //////////////////////////
- /*傳入文章ID 解析出文章標題*/
- ////// ////////////////////////////////////////////////// //////////////////////////////////////////////////
- public function getBookNameById($aid){
- //初始化curl
- $ch= curl_init();
- //url
- $url='http://www.motie.com /book/'.$aid;
- if(is_numeric($aid)){
- //正規表示式符合
- $ru="/s*(.*)s*s*/";
- }
- else{
- //殭屍爆發之全家求生路_第一章殭屍爆發為吾友愛樂兒更新~_磨鐵
- $ru="/(.*)/";
- }
- //設定選項,包括網址
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自動輸出內容
- curl_setopt($ch, CUR-LO 0);//不回傳頭部訊息
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);
- //執行curl
- $output = curl_exec($ch);
- //錯誤提示
- if(curl_exec($ch) === false){
- die(curl_error($ch));
- }
- // 檢查是否有錯誤發生
- if(curl_errno($ch )){
- echo 'Curl error: ' . curl_error($ch);
- }
- //釋放curl句柄
- curl_close($ch);
- $arr=array();
- preg_match_all($ru,$output,$arr);
- return $arr[1][0];
- }
- //////////////// ////////////////////////////////////////////////// /////////////////////////////////////////
- /*傳入文章ID解析文章內容*/
- ////////////////////////////////////////// ////////////////////////////////////////////////// //////////////
- public function getBookContextById($aid){
- //開始解析文章
- $ids=array();
- $ids=explode ("_",$aid);
- $titleId=trim($ids[0]);
- $aticleId=trim($ids[1]);
- $ch= curl_init();
- $ru="/
[sS]* [sS]*(.*)<img src="/ajax/chapter/%24titleId/%24aticleId" class="hidden" alt="使用curl和正規表示式抓取網頁數據" > 登入後複製 /ui"; - $url='http://www.motie.com/book/'.$aid;
- //正規表示式符合
-
- //設定選項,包括URL
- curl_setopt ($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自動輸出內容
- curl_setopt($ch, CURLOPT_HEADER, 0); 🎜> curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);
- //執行curl
- $output = curl_exec($ch);
- //錯誤提示
- if(curl_exec($ch) ==== = false){
- die(curl_error($ch));
- }
- // 檢查是否有錯誤發生
- if(curl_errno($ch)){
- echo 'Curl error: ' . curl_error($ch);
- }
- $arr=array();
- $arr2=array();
- preg_match_all($ru,$output,$arr);
- curl_close($ch);
- #var_dump($arr);
- $s=$arr[0][0];
- $s=substr($s,180);
- $arr2 =explode(" return trim($arr2[0]);
- }
-
- //////////////// ////////////////////////////////////////////////// /////////////////////////////////////////
- /*靜態方法@生成小說檔案可以直接呼叫*/
- //////////////////////////////////////// ////////////////////////////////////////////////// ////////////////
- public static function createBookById($id){
-
- if(!is_numeric($id)){
-
- echo "
INIT BEGIN START WRITE!";
- $st=new self();
- $cons=$st->getBookContextById($id);
- $title=$st-> getBookNameById($id);
- $cons=trim($cons);
- $t=explode(" ",$title);
- //建構目錄
- $dir=array();
- $dir=explode("_",$t[0]);
- $wzdir=$dir[0]; //書名作為目錄名稱
- $wzchapter=$dir[1]; //第幾章
- //建立目錄
- $wzdir2=iconv("UTF-8", "GBK", $wzdir);//目錄編碼注意這裡保留對$wzdir字串的引用,用來建構檔名,不能用此處,防止二次編碼
- if(!file_exists($wzdir2)){
- mkdir($wzdir2); //建立目錄
- }
- //建構檔名
- $wztitle="./".$wzdir."/"."$t[0]".".txt";
- //保證儲存的檔案名稱不是亂碼
- $wztitle=iconv("UTF-8", "GBK", $wztitle);
- $f=fopen($wztitle,"w ");
- fwrite($f,$cons) ;
- echo "$wzdir ".$wzchapter."寫入成功";
- fclose($f );
-
- }
- else{
- $ids=self::getBookIdsById($id);
-
- //這裡伺服器可能會斷線,所以最好用session記錄迴圈
- #for($i=$_SESSION["$id"."_fid"];$i
- #self::createBookById($id."_".$ids[$_SESSION["$id"."_fid"] ]);//建構id
- #}
-
- for($i=$_SESSION["$id"."_fid"];$i
- self::createBookById($id."_".$ids[$i]);//建構id
- }
-
- #echo "
寫入工作全部完成";
- #echo $id."_".$ids[0]."
";
- #var_dump($ids) ;
-
- }
-
- }
- /*
- 取得小說的所有ID
- @param $id 文章ID
- @return array;
- */
- public static function getBookIdsById($aid){
- $ch= curl_init();
- $url='http://www.motie.com/book/'.$aid."/chapter";
- //注意這裡的?可以取得最少匹配項
- $ru='/[sS]*?
- [sS]*?.*? .*?/u';//正規表示式符合
- //設定選項,包括URL
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFERRETURNTRANSFER , 1);//不自動輸出內容
- curl_setopt($ch, CURLOPT_HEADER, 0);//不回傳頭部資訊
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);
- //執行curl
- $output = curl_exec($ch);
- // 檢查是否有錯誤發生
- if(curl_errno($ch)){
- echo 'Curl error: ' . curl_error($ch);
- }
- //釋放curl句柄
- curl_close($ch);
- $arr=array();
- preg_match_all($ru,$output,$arr,PREG_PATTERN_ORDER);
- return $arr[1];
- }
- }
-
-
-
-
-
-
-
-
- ?>
複製程式碼
-
session_start();
- require_once("SpiderTools.class.php");
- if($_REQUEST["bid"]){"bid"]){
- if(is_numeric($_REQUEST["bid"])){
- SpiderTools::createBookById(trim($_REQUEST["bid"]));
- }
- else{ echo "
請輸入正確的文章ID ";- }
- }
- ?>
-
複製程式碼
複製程式碼
-
- 下載小說啦
-
輸入磨鐵中文網你想看到的小說ID號就可以下載小說啦
-
-
-
-
-
-
-
-
複製程式碼
|