php抓取页面生成html,PHP smiple html dom抓取页面内容
之前做頁面抓取,數據采集等功能的時候,第一個想到的就是用正則表達式去匹配頁面內容。但是對于像我這種,正則只懂皮毛的人來說,寫正則是真的很惡心的一件事。去網上找,也不一定能改成自己需要的正則。
今天給大家推薦一個很好用的工具smiple html dom。
文檔地址:http://www.phpddt.com/manual/simplehtmldom_1_5/manual.htm
解析器不僅僅只是幫助我們驗證html文檔;更能解析不符合W3C標準的html文檔。它使用了類似jQuery的元素選擇器,通過元素的id,class,tag等等來查找定位;同時還提供添加、刪除、修改文檔樹的功能。當然,這樣一款強大的html Dom解析器也不是盡善盡美;在使用的過程中需要十分小心內存消耗的情況。不過,不要擔心;本文中,筆者在最后會為各位介紹如何避免消耗過多的內存。
下面是我解析的mm131.com的頁面內容代碼,主要是盜鏈他的圖片,O(∩_∩)O哈哈~
index.php
require?'./dom/simple_html_dom.php';require?'./include/function.php';
//打開錯誤信息
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個代碼塊都是index.php的內容。
其中的require './dom/simple_html_dom.php'; 即引用的simple html dom 解析器。
function.php 只是封裝了2個方法?代碼如下: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]?:?'';
}
如何避免解析器消耗過多內存在本文的開篇中,筆者就提到了Simple HTML DOM解析器消耗內存過多的問題。如果php腳本占用內存太多,會導致網站停止響應等一系列嚴重的問題。解決的方法也很簡單,在解析器加載html文檔并使用完成后,記得清理掉這個對象就可以了。當然,也不要把問題看得太嚴重了。如果只是加載了2、3個文檔,清理或不清理是沒有多大區別的。當你加載了5個10個甚至更多的文檔的時候,用完一個就清理一下內存絕對是對自己負責啦^_^
總結
以上是生活随笔為你收集整理的php抓取页面生成html,PHP smiple html dom抓取页面内容的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: vim 显示行号_Vim给文件加行号,这
- 下一篇: highcharts 显示平均值数值_拼
