日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

php抓取页面生成html,PHP smiple html dom抓取页面内容

發(fā)布時(shí)間:2024/7/23 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php抓取页面生成html,PHP smiple html dom抓取页面内容 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前做頁(yè)面抓取,數(shù)據(jù)采集等功能的時(shí)候,第一個(gè)想到的就是用正則表達(dá)式去匹配頁(yè)面內(nèi)容。但是對(duì)于像我這種,正則只懂皮毛的人來(lái)說(shuō),寫(xiě)正則是真的很惡心的一件事。去網(wǎng)上找,也不一定能改成自己需要的正則。

今天給大家推薦一個(gè)很好用的工具smiple html dom。

文檔地址:http://www.phpddt.com/manual/simplehtmldom_1_5/manual.htm

解析器不僅僅只是幫助我們驗(yàn)證html文檔;更能解析不符合W3C標(biāo)準(zhǔn)的html文檔。它使用了類似jQuery的元素選擇器,通過(guò)元素的id,class,tag等等來(lái)查找定位;同時(shí)還提供添加、刪除、修改文檔樹(shù)的功能。當(dāng)然,這樣一款強(qiáng)大的html Dom解析器也不是盡善盡美;在使用的過(guò)程中需要十分小心內(nèi)存消耗的情況。不過(guò),不要擔(dān)心;本文中,筆者在最后會(huì)為各位介紹如何避免消耗過(guò)多的內(nèi)存。

下面是我解析的mm131.com的頁(yè)面內(nèi)容代碼,主要是盜鏈他的圖片,O(∩_∩)O哈哈~

index.php

require?'./dom/simple_html_dom.php';

require?'./include/function.php';

//打開(kāi)錯(cuò)誤信息

error_reporting(E_ERROR?|?E_WARNING?|?E_PARSE);

$count?=?0;

error_reporting(0);

$url?=?trim(post("url"));

$str?=?'';

if($url){

$html?=?new?simple_html_dom();

$html->load_file($url.'.html');

$ret?=?$html->find('.content-pic?img');

$title?=?$html->find("title",0);

echo?str_ireplace("www.mm131.com","",iconv("GBK","UTF-8",$title->innertext))."
";

foreach($ret?as?$v){

if($v->src){

$str?.=?$v->src."\n";

$count++;

}

}

flush();

for($i?=?2;$i?

$html->clear();

$location?=?$url.'_'.$i.'.html';

if(!GetCurl($location)){

break;

}

$html->load_file($location);

$ret?=?$html->find('.content-pic?img');

foreach($ret?as?$v){

if($v->src){

$str?.=?$v->src."\n";

$count++;

}

}

flush();

}

echo?$count;

}

以上3個(gè)代碼塊都是index.php的內(nèi)容。

其中的require './dom/simple_html_dom.php'; 即引用的simple html dom 解析器。

function.php 只是封裝了2個(gè)方法?代碼如下:function?GetCurl($url){

$ch?=?curl_init();

curl_setopt($ch,CURLOPT_URL,$url);

curl_setopt($ch,?CURLOPT_HEADER,?true);

curl_setopt($ch,?CURLOPT_NOBODY,true);

curl_setopt($ch,?CURLOPT_RETURNTRANSFER,true);

curl_setopt($ch,?CURLOPT_FOLLOWLOCATION,true);

curl_setopt($ch,?CURLOPT_AUTOREFERER,true);

curl_setopt($ch,?CURLOPT_TIMEOUT,30);

$rtn?=?curl_exec($ch);

curl_exec($ch);

if(strpos($rtn,'404?Not?Found')==true)?{

return?false;

}

return?true;

}

function?post($id)?{

return?isset?(?$_POST?[$id]?)???$_POST?[$id]?:?'';

}

如何避免解析器消耗過(guò)多內(nèi)存在本文的開(kāi)篇中,筆者就提到了Simple HTML DOM解析器消耗內(nèi)存過(guò)多的問(wèn)題。如果php腳本占用內(nèi)存太多,會(huì)導(dǎo)致網(wǎng)站停止響應(yīng)等一系列嚴(yán)重的問(wèn)題。解決的方法也很簡(jiǎn)單,在解析器加載html文檔并使用完成后,記得清理掉這個(gè)對(duì)象就可以了。當(dāng)然,也不要把問(wèn)題看得太嚴(yán)重了。如果只是加載了2、3個(gè)文檔,清理或不清理是沒(méi)有多大區(qū)別的。當(dāng)你加載了5個(gè)10個(gè)甚至更多的文檔的時(shí)候,用完一個(gè)就清理一下內(nèi)存絕對(duì)是對(duì)自己負(fù)責(zé)啦^_^

總結(jié)

以上是生活随笔為你收集整理的php抓取页面生成html,PHP smiple html dom抓取页面内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。