Jadual Kandungan
写入工作全部完成
输入磨铁中文网你想看到的小说ID号就可以下载小说啦
Rumah pembangunan bahagian belakang tutorial php 使用curl和正则表达式抓取网页数据

使用curl和正则表达式抓取网页数据

Jul 25, 2016 am 08:48 AM

利用curl和正则表达式做的一个针对磨铁中文网非vip章节的小说抓取器,支持输入小说ID下载小说。
依赖项:curl
可以简单的看下,里面用到了curl ,正则表达式,ajax等技术,适合新手看看。在本地测试,必须保证联网并且确保php开启curl的mode.
  1. session_start();
  2. //封装成类 开启这些自动抓取文章
  3. #header("Refresh:30;http://www.test.com:8080");
  4. class SpiderTools{
  5. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  6. /*传入文章ID 解析出文章标题*/
  7. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  8. public function getBookNameById($aid){
  9. //初始化curl
  10. $ch= curl_init();
  11. //url
  12. $url='http://www.motie.com/book/'.$aid;
  13. if(is_numeric($aid)){
  14. //正则表达式匹配
  15. $ru="/

    \s*(.*)\s*\s*/";
  16. }
  17. else{
  18. //丧尸爆发之全家求生路_第一章 丧尸爆发  为吾友爱乐儿更新~_磨铁
  19. $ru="/(.*)/";<li> }</li> <li> //设置选项,包括URL</li> <li> curl_setopt($ch, CURLOPT_URL, $url);</li> <li> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容</li> <li> curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息</li> <li> curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); </li> <li> //执行curl</li> <li> $output = curl_exec($ch);</li> <li> //错误提示</li> <li> if(curl_exec($ch) === false){</li> <li> die(curl_error($ch));</li> <li> }</li> <li> // 检查是否有错误发生</li> <li> if(curl_errno($ch)){</li> <li> echo 'Curl error: ' . curl_error($ch);</li> <li> }</li> <li> //释放curl句柄</li> <li> curl_close($ch);</li> <li> $arr=array();</li> <li> preg_match_all($ru,$output,$arr);</li> <li> return $arr[1][0];</li> <li> }</li> <li> ////////////////////////////////////////////////////////////////////////////////////////////////////////// </li> <li> /*传入文章ID 解析文章内容*/</li> <li> //////////////////////////////////////////////////////////////////////////////////////////////////////////</li> <li> public function getBookContextById($aid){</li> <li> //开始解析文章</li> <li> $ids=array();</li> <li> $ids=explode("_",$aid);</li> <li> $titleId=trim($ids[0]);</li> <li> $aticleId=trim($ids[1]);</li> <li> $ch= curl_init();</li> <li> $ru="/<div class='\"page-content\"'>[\s\S]*<div class="code" style="position:relative; padding:0px; margin:0px;"><pre ondragstart='\"return' false oncopy='\"return' oncut='\"return' oncontextmenu='\"return' class='\"note\"' id='\"html_content_\d*\"'>[\s\S]*(.*)<img src="%5C%22%5C/ajax%5C/chapter%5C/%24titleId%5C/%24aticleId%5C%22" class='\"hidden\"' alt="使用curl和正则表达式抓取网页数据 " >/ui"; </pre><div class="contentsignin">Salin selepas log masuk</div></div> <li> $url='http://www.motie.com/book/'.$aid;</li> <li> //正则表达式匹配</li> <li> <li> //设置选项,包括URL</li> <li> curl_setopt($ch, CURLOPT_URL, $url);</li> <li> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容</li> <li> curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息</li> <li> curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); </li> <li> //执行curl</li> <li> $output = curl_exec($ch);</li> <li> //错误提示</li> <li> if(curl_exec($ch) === false){</li> <li> die(curl_error($ch));</li> <li> }</li> <li> // 检查是否有错误发生</li> <li> if(curl_errno($ch)){</li> <li> echo 'Curl error: ' . curl_error($ch);</li> <li> }</li> <li> $arr=array();</li> <li> $arr2=array();</li> <li> preg_match_all($ru,$output,$arr);</li> <li> curl_close($ch);</li> <li> #var_dump($arr);</li> <li> $s=$arr[0][0];</li> <li> $s=substr($s,180);</li> <li> $arr2=explode("<img alt="使用curl和正则表达式抓取网页数据 " > return trim($arr2[0]);</li> <li> }</li> <li> <li> ////////////////////////////////////////////////////////////////////////////////////////////////////////// </li> <li> /*静态方法 @生成小说文件 可以直接调用 */</li> <li> //////////////////////////////////////////////////////////////////////////////////////////////////////////</li> <li> public static function createBookById($id){</li> <li> </li> <li> if(!is_numeric($id)){</li> <li> <li> echo "<br>INIT BEGIN START WRITE!";</li> <li> $st=new self();</li> <li> $cons=$st->getBookContextById($id);</li> <li> $title=$st->getBookNameById($id);</li> <li> $cons=trim($cons);</li> <li> $t=explode(" ",$title);</li> <li> //构造目录</li> <li> $dir=array();</li> <li> $dir=explode("_",$t[0]);</li> <li> $wzdir=$dir[0]; //书名称 作为目录名称</li> <li> $wzchapter=$dir[1]; //第几章</li> <li> //创建目录</li> <li> $wzdir2=iconv("UTF-8", "GBK", $wzdir);//目录编码 注意这里保留对$wzdir字符串的引用,用来构造文件名,不能用此处,防止二次编码</li> <li> if(!file_exists($wzdir2)){</li> <li> mkdir($wzdir2); //创建目录</li> <li> }</li> <li> //构造文件名</li> <li> $wztitle="./".$wzdir."/"."$t[0]".".txt";</li> <li> //保证保存的文件名称不是乱码</li> <li> $wztitle=iconv("UTF-8", "GBK", $wztitle);</li> <li> $f=fopen($wztitle,"w+");</li> <li> fwrite($f,$cons);</li> <li> echo "<font color="green">$wzdir </font>".$wzchapter."<font color="red">写入成功</font>";</li> <li> fclose($f); </li> <li> </li> <li> } </li> <li> else{</li> <li> $ids=self::getBookIdsById($id); </li> <li> </li> <li> //这里服务器可能会掉线,所以最好用session记录循环</li> <li> #for($i=$_SESSION["$id"."_fid"];$i </li> <li> #self::createBookById($id."_".$ids[$_SESSION["$id"."_fid"]++]);//构造id</li> <li> #}</li> <li> </li> <li> for($i=$_SESSION["$id"."_fid"];$i </li> <li> self::createBookById($id."_".$ids[$i]);//构造id</li> <li> }</li> <li> </li> <li> #echo "<hr> <hr> <br><h1 id="写入工作全部完成">写入工作全部完成</h1>";</li> <li> #echo $id."_".$ids[0]."<br>"; </li> <li> #var_dump($ids);</li> <li> </li> <li> }</li> <li> <li> }</li> <li> /*</li> <li> 获取小说的所有ID</li> <li> @param $id 文章ID</li> <li> @return array;</li> <li> */</li> <li> public static function getBookIdsById($aid){ </li> <li> $ch= curl_init();</li> <li> $url='http://www.motie.com/book/'.$aid."/chapter";</li> <li> //注意这里的?可以获取最少匹配项</li> <li> $ru='/[\s\S]*?</li> <li class='\"\"' createdate='\"\d{4}\-\d{2}\-\d{2}'>[\s\S]*?<a href="%5C%22%5C/book%5C/'.%24aid.'_(%5Cd*?)%5C%22%5Cs%E7%A8%8B%E5%BA%8F%E7%8C%BF%E7%AC%91%E8%AF%9D">.*?.*?/u';//正则表达式匹配<li> //设置选项,包括URL</li> <li> curl_setopt($ch, CURLOPT_URL, $url);</li> <li> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不自动输出内容</li> <li> curl_setopt($ch, CURLOPT_HEADER, 0);//不返回头部信息</li> <li> curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); </li> <li> //执行curl</li> <li> $output = curl_exec($ch);</li> <li> // 检查是否有错误发生</li> <li> if(curl_errno($ch)){</li> <li> echo 'Curl error: ' . curl_error($ch);</li> <li> }</li> <li> //释放curl句柄</li> <li> curl_close($ch);</li> <li> $arr=array();</li> <li> preg_match_all($ru,$output,$arr,PREG_PATTERN_ORDER);</li> <li> return $arr[1];</li> <li> }</li> <li> }</li> <li> <li> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> <li>?></li></a> </li> </div> <em onclick="copycode($('code_Sfk'));">复制代码</em> </li>
  1. session_start();
  2. require_once("SpiderTools.class.php");
  3. if($_REQUEST["bid"]){
  4. if(is_numeric($_REQUEST["bid"])){
  5. SpiderTools::createBookById(trim($_REQUEST["bid"]));
  6. }
  7. else{
  8. echo "
    请输入正确的文章ID
    ";
  9. }
  10. }
  11. ?>
复制代码
  1. 下载小说啦
  2. 输入磨铁中文网你想看到的小说ID号就可以下载小说啦

  • 复制代码


    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Arahan sembang dan cara menggunakannya
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

    JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

    Terangkan konsep pengikatan statik lewat dalam PHP. Terangkan konsep pengikatan statik lewat dalam PHP. Mar 21, 2025 pm 01:33 PM

    Artikel membincangkan pengikatan statik lewat (LSB) dalam PHP, yang diperkenalkan dalam Php 5.3, yang membolehkan resolusi runtime kaedah statik memerlukan lebih banyak warisan yang fleksibel. Isu: LSB vs polimorfisme tradisional; Aplikasi Praktikal LSB dan Potensi Perfo

    Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Ciri -ciri Keselamatan Rangka Kerja: Melindungi Kelemahan. Mar 28, 2025 pm 05:11 PM

    Artikel membincangkan ciri -ciri keselamatan penting dalam rangka kerja untuk melindungi daripada kelemahan, termasuk pengesahan input, pengesahan, dan kemas kini tetap.

    Bagaimana cara menghantar permintaan pos yang mengandungi data JSON menggunakan perpustakaan php curl? Bagaimana cara menghantar permintaan pos yang mengandungi data JSON menggunakan perpustakaan php curl? Apr 01, 2025 pm 03:12 PM

    Menghantar data JSON menggunakan perpustakaan Curl PHP dalam pembangunan PHP, sering kali perlu berinteraksi dengan API luaran. Salah satu cara biasa ialah menggunakan perpustakaan curl untuk menghantar post ...

    Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Menyesuaikan/Memperluas Rangka Kerja: Cara Menambah Fungsi Custom. Mar 28, 2025 pm 05:12 PM

    Artikel ini membincangkan menambah fungsi khusus kepada kerangka kerja, memberi tumpuan kepada pemahaman seni bina, mengenal pasti titik lanjutan, dan amalan terbaik untuk integrasi dan debugging.

    Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

    Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

    Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

    Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

    See all articles