Motie Chinese 웹사이트의 비VIP 챕터에 대해 컬과 정규식을 사용하여 만든 소설 그래버입니다. 소설을 다운로드하려면 소설 ID를 입력하는 것을 지원합니다. 종속성: 컬 Curl, 정규 표현식, Ajax 및 기타 기술이 사용되어 초보자에게 적합합니다.로컬에서 테스트할 때는 인터넷에 연결되어 있는지 확인하고 PHP가 컬 모드를 켜는지 확인해야 합니다.
- session_start();
- //자동으로 크롤링되는 기사를 활성화하려면 클래스로 캡슐화하세요
- #header("Refresh:30;http : //www.test.com:8080");
- class SpiderTools{
- //////////////////////////// /////////////////////////////////////////////// ///// ///////////////////////////
- /*들어오는 기사 ID는 기사 제목을 구문 분석합니다*/
- ///// /////////////////////////////////////////// ///////// //////////////////////////////////////// //////////// /
- 공용 함수 getBookNameById($aid){
- //curl 초기화
- $ch= cur_init();
- //url
- $url='http://www.motie.com/book/'.$aid;
- if(is_numeric($aid)){
- //정규식 일치
- $ru="/< ;h1sclass="p-title">s *(.*)s*s*/";
- }
- else{
- //< title>Zombie Outbreak: The Family's Way to Survive_Chapter One: Zombie Outbreak Update for My Friend~_Sharp Iron
- $ru="/ (.*) }
- //URL을 포함한 옵션 설정
- 컬_setopt($ch, CURLOPT_URL, $url);
- 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//자동 출력 없음 Content
- cur_setopt($ch, CURLOPT_HEADER, 0); //헤더 정보를 반환하지 않습니다.
- cur_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($ch);
- }
- //해제 컬 핸들
- 컬_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= 트림($ids[0]);
- $aticleId=trim($ids[1])
- $ch= 컬_init();
- $ru="/
[sS]* [sS]*(.*)<img src="/ajax/chapter/$titleId/$aticleId " class="hidden" /> /ui";
- $url='http ://www.motie.com/book/'.$aid;
- //정규식 일치
-
- //URL을 포함한 옵션 설정
- 컬_setopt($ch, CURLOPT_URL, $url) ; //curl 실행
- $output =curl_exec($ch);
- //오류 메시지
- if(curl_exec($ch) === false){
- die (curl_error($ch));
- }
- // 오류 발생 여부 확인
- if(curl_errno($ch)){
- echo '컬 오류: ' .
- }
- $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]);
- }
- /////////////////////// ///////////////////////////////////////////////// //////////////////////////// //////////
- /*정적 메소드 @생성 소설 파일을 직접 호출할 수 있습니다*/
- ///////////////////// ////////////////// ///////////////////////////////////////////////// //////////////////////
- 공개 정적 함수 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 문자열에 대한 참조는 파일 이름을 구성하기 위해 여기에 유지됩니다. 2차 인코딩을 방지하기 위해 여기에서 사용할 수 없습니다.
- 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)
-
- //여기 서버는 오프라인일 수 있습니다. , 따라서 세션 기록 루프를 사용하는 것이 가장 좋습니다
- #for($i=$_SESSION["$id"."_fid"];$i<=count($ids);$_SESSION["$id"." _fid" ] ,$i ){
-
- #self::createBookById($id."_".$ids[$_SESSION["$id"."_fid"] ]);//구성 ID
- #}
-
- for($i=$_SESSION["$id"."_fid"];$i<=count($ids);$_SESSION["$id"."_fid"] ,$ i ){
-
- self::createBookById($id."_".$ids[$i]);//ID 생성
- }
-
- #echo "< hr/ >
작성 작업이 완료되었습니다"; - #echo $id."_".$ids[0]." < ;br/>";
- #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]*?< li class="" createate="d{4}-d{2}-d{2} d{2}:d{2}:d{2}">[sS]*?.*?.*?/u';//정규식 일치
- //URL을 포함한 옵션 설정
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//내용을 자동으로 출력하지 않음
- curl_setopt($ch, CURLOPT_HEADER, 0);// 헤더를 반환하지 않음 Information
- cur_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0)
- //curl 실행
- $output = cur_exec($ch);
- // 오류 발생 여부 확인
- if(curl_errno( $ch)){
- echo '컬 오류: ' . 컬_error($ch);
- }
- //컬 핸들 해제
- 컬_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"]) {
- if(is_numeric($_REQUEST["bid"])){
- SpiderTools::createBookById(trim($_REQUEST["bid"]));
- }
- else{
- echo "
올바른 기사 ID를 입력하세요 ";
- }
- }
- ?>
-
코드 복사
|