php
php實(shí)現的采集小程序,做采集的必看
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 495 次瀏覽 ? 2020-07-25 08:02
以下是我收集的php實(shí)現的采集小程序,自己測試可用php 文章采集,做采集很實(shí)用哦!
<?php
//調用方法 :localhost/2.php?id=1 (自動(dòng)采集1-8的列表)
header("Content-type:text/html;charset=utf-8");
$con =mysql_connect("localhost", "root", "huweishen.com") or die("數據庫鏈接錯誤");
mysql_select_db("liuyan", $con);
mysql_query("set names 'utf8'");
function preg_substr($start, $end, $str) // 正則截取函數
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函數
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用實(shí)例 ----------------
if($_GET['id']<=8&&$_GET['id']){
$id=$_GET['id'];
$url = "http://www.037c.com/New/list_5_$id.html"; //目標站
$fp = fopen($url, "r") or die("超時(shí)");
$fcontents = file_get_contents($url);
$pattern="/<\/span><a href=\"(.*)\" title=\"(.*)\" target=\"_blank\">/iUs";//正則
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv('GB2312', 'UTF-8', addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv("GB2312","UTF-8", file_get_contents($url));
$author = preg_substr("/作者:/", "/<\//", $str); // 通過(guò)正則提取作者
$content = str_substr('<p class="wltg">', '</p>', $str); //通過(guò)字符串提取標題
$sql = "INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES ('$title', '$url' , '$content' , '$author')";
// echo $sql."<br/>";
mysql_query($sql);
}
$id++;
echo "正在采集URL數據列表$id...請稍后...";
echo "<script>window.location='2.php?id=$id'</script>";
}
else{
echo "采集數據結束。";
}
?>
其中 title 設置惟一php 文章采集,可以避免重復采集,很好的的一個(gè)php采集小程序,作者:風(fēng)云無(wú)忌 查看全部

以下是我收集的php實(shí)現的采集小程序,自己測試可用php 文章采集,做采集很實(shí)用哦!
<?php
//調用方法 :localhost/2.php?id=1 (自動(dòng)采集1-8的列表)
header("Content-type:text/html;charset=utf-8");
$con =mysql_connect("localhost", "root", "huweishen.com") or die("數據庫鏈接錯誤");
mysql_select_db("liuyan", $con);
mysql_query("set names 'utf8'");
function preg_substr($start, $end, $str) // 正則截取函數
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函數
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用實(shí)例 ----------------
if($_GET['id']<=8&&$_GET['id']){
$id=$_GET['id'];
$url = "http://www.037c.com/New/list_5_$id.html"; //目標站
$fp = fopen($url, "r") or die("超時(shí)");
$fcontents = file_get_contents($url);
$pattern="/<\/span><a href=\"(.*)\" title=\"(.*)\" target=\"_blank\">/iUs";//正則
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv('GB2312', 'UTF-8', addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv("GB2312","UTF-8", file_get_contents($url));
$author = preg_substr("/作者:/", "/<\//", $str); // 通過(guò)正則提取作者
$content = str_substr('<p class="wltg">', '</p>', $str); //通過(guò)字符串提取標題
$sql = "INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES ('$title', '$url' , '$content' , '$author')";
// echo $sql."<br/>";
mysql_query($sql);
}
$id++;
echo "正在采集URL數據列表$id...請稍后...";
echo "<script>window.location='2.php?id=$id'</script>";
}
else{
echo "采集數據結束。";
}
?>

其中 title 設置惟一php 文章采集,可以避免重復采集,很好的的一個(gè)php采集小程序,作者:風(fēng)云無(wú)忌
PHP寫(xiě)微信公眾號文章頁(yè)采集方法
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 458 次瀏覽 ? 2020-07-24 08:04
另外注意:這個(gè)匹配規則會(huì )可能在一段時(shí)間以后有變化。這篇文章會(huì )盡量保持更新。如果你按照我的文章制作了采集系統以后,當某三天失效了,別忘了回去再瞧瞧文章是否有更新。
2)內容處理:
通過(guò)前面的方式我們獲得了文章內容的html,但是你將文章內容顯示下來(lái)以后才會(huì )發(fā)覺(jué),圖片和視頻不能正常顯示。因為這個(gè)html還須要一些加工:
首先是圖片,微信文章中的標簽中的src屬性全部都用了data-src屬性替代。只有在顯示的時(shí)侯就會(huì )被替換過(guò)來(lái)。所以我們也有兩個(gè)方案,將源代碼直接替換過(guò)來(lái),或者用js在顯示時(shí)侯再替換。下面我先介紹直接替換html的方式:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("data-src","src",$content);
然后是視頻,視頻的顯示不正常,經(jīng)過(guò)常年測試后發(fā)覺(jué)只要替換一個(gè)頁(yè)面地址才能解決,過(guò)程就不說(shuō)了,直接說(shuō)結果:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("preview.html","player.html",$content);
通過(guò)這兩個(gè)替換過(guò)后,文章內容html中的圖片和視頻就都正常了。
3) 公眾號相關(guān)信息:
通過(guò)本專(zhuān)欄之前的文章,介紹了我們使用陌陌客戶(hù)端,任意打開(kāi)一個(gè)公眾號的歷史消息頁(yè)以后。系統從數據庫中辨識biz的值,發(fā)現數據庫中沒(méi)有記錄,就會(huì )插入一條新的紀錄。之后的采集隊列都會(huì )定期按照這個(gè)biz來(lái)獲取這個(gè)公眾號的歷史消息列表。
但是我們只獲得了這個(gè)公眾號的biz,公眾號的名稱(chēng),頭像這兩個(gè)重要信息還是沒(méi)有獲取到。主要誘因是歷史消息頁(yè)面中沒(méi)有這兩個(gè)信息。但是我們可以從文章頁(yè)面中獲取到。
在陌陌文章頁(yè)面html的頂部,有一些js的變量形參的代碼,通過(guò)正則匹配然后我們就可以獲得這兩個(gè)公眾號的信息:
1
2
3
4
5
6
7
//$html變量的值是上面獲取到的文章全部html
preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
$nickname = $m[1][0];//公眾號愛(ài)稱(chēng)
preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
$head_img = $m[1][0];//公眾號頭像
通過(guò)這兩個(gè)正則匹配,我們才能獲取到公眾號的頭像和愛(ài)稱(chēng),然后按照文章地址中的biz,可以保存到對應的微信號數據表中。
3、文章的保存和處理
前面的代碼已然將文章內容獲取到變量中了。如何保存雖然每個(gè)人似乎都有自己的看法。我這兒介紹一下我的保存內容的方式:
將文章內容的html以數據庫id為文件名保存成html文件,以biz數組為目錄。
1
2
3
4
5
6
7
8
9
10
11
$dir = "./".$biz."/";
$filename = $dir.$id.".html";
if(!is_dir($dir)) {
mkdir($cache_dir);
chmod($cache_dir,0777);
}
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
以上代碼是一個(gè)標準的php構建文件夾保存文件的代碼,大家可以依照自己的實(shí)際情況安排保存方式。
在這以后我們就可以在自己的服務(wù)器上得到一個(gè)html文件,內容就是公眾號的文章內容。我們可以從瀏覽器中打開(kāi)看一下。這時(shí)你或許會(huì )發(fā)覺(jué)圖片防盜鏈了!無(wú)法正常顯示!包括數據庫中保存的文章封面圖,公眾號的頭像都是防盜鏈的。
別急,這個(gè)問(wèn)題挺好解決,只須要將圖片也保存到自己的服務(wù)器,無(wú)非是將來(lái)會(huì )占用自己的服務(wù)器空間和帶寬。
圖片防盜鏈的原理是當圖片在網(wǎng)頁(yè)中顯示的時(shí)侯php 采集微信文章圖片,圖片服務(wù)器會(huì )測量到引用這張圖片的服務(wù)器域名,當發(fā)覺(jué)服務(wù)器域名不包含或的時(shí)侯才會(huì )被替換成防盜鏈圖片。
但是假若測量不到引用頁(yè)面的域名才會(huì )正常顯示,所以我們通過(guò)php的函數file_get_content()就可以將圖片的二進(jìn)制代碼獲取過(guò)來(lái),然后按照自己的看法起個(gè)文件名保存到自己的服務(wù)器上。在這里再介紹一個(gè)保存圖片的方式,我目前使用了騰訊云的“萬(wàn)象優(yōu)圖”,通過(guò)它們提供的api將圖片保存到云空間,這樣的用處是讀取圖片時(shí)直接在圖片的鏈接地址加上希望得到的圖片規格大小參數,就可以直接得到一張縮略圖。比存在自己的服務(wù)器便捷得多。阿里云也應當有同樣的產(chǎn)品php 采集微信文章圖片,好像名叫對象儲存。
另外,我采集公眾號內容的目的是制做成一個(gè)新聞app,在app上將html代碼顯示下來(lái)以后,因為app同樣沒(méi)有域名,防盜鏈服務(wù)器也同樣不會(huì )覺(jué)得圖片被盜鏈了。這樣就可以直接顯示圖片下來(lái)。 查看全部
另外注意:這個(gè)匹配規則會(huì )可能在一段時(shí)間以后有變化。這篇文章會(huì )盡量保持更新。如果你按照我的文章制作了采集系統以后,當某三天失效了,別忘了回去再瞧瞧文章是否有更新。
2)內容處理:
通過(guò)前面的方式我們獲得了文章內容的html,但是你將文章內容顯示下來(lái)以后才會(huì )發(fā)覺(jué),圖片和視頻不能正常顯示。因為這個(gè)html還須要一些加工:
首先是圖片,微信文章中的標簽中的src屬性全部都用了data-src屬性替代。只有在顯示的時(shí)侯就會(huì )被替換過(guò)來(lái)。所以我們也有兩個(gè)方案,將源代碼直接替換過(guò)來(lái),或者用js在顯示時(shí)侯再替換。下面我先介紹直接替換html的方式:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("data-src","src",$content);
然后是視頻,視頻的顯示不正常,經(jīng)過(guò)常年測試后發(fā)覺(jué)只要替換一個(gè)頁(yè)面地址才能解決,過(guò)程就不說(shuō)了,直接說(shuō)結果:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("preview.html","player.html",$content);
通過(guò)這兩個(gè)替換過(guò)后,文章內容html中的圖片和視頻就都正常了。
3) 公眾號相關(guān)信息:
通過(guò)本專(zhuān)欄之前的文章,介紹了我們使用陌陌客戶(hù)端,任意打開(kāi)一個(gè)公眾號的歷史消息頁(yè)以后。系統從數據庫中辨識biz的值,發(fā)現數據庫中沒(méi)有記錄,就會(huì )插入一條新的紀錄。之后的采集隊列都會(huì )定期按照這個(gè)biz來(lái)獲取這個(gè)公眾號的歷史消息列表。
但是我們只獲得了這個(gè)公眾號的biz,公眾號的名稱(chēng),頭像這兩個(gè)重要信息還是沒(méi)有獲取到。主要誘因是歷史消息頁(yè)面中沒(méi)有這兩個(gè)信息。但是我們可以從文章頁(yè)面中獲取到。
在陌陌文章頁(yè)面html的頂部,有一些js的變量形參的代碼,通過(guò)正則匹配然后我們就可以獲得這兩個(gè)公眾號的信息:
1
2
3
4
5
6
7
//$html變量的值是上面獲取到的文章全部html
preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
$nickname = $m[1][0];//公眾號愛(ài)稱(chēng)
preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
$head_img = $m[1][0];//公眾號頭像
通過(guò)這兩個(gè)正則匹配,我們才能獲取到公眾號的頭像和愛(ài)稱(chēng),然后按照文章地址中的biz,可以保存到對應的微信號數據表中。
3、文章的保存和處理
前面的代碼已然將文章內容獲取到變量中了。如何保存雖然每個(gè)人似乎都有自己的看法。我這兒介紹一下我的保存內容的方式:
將文章內容的html以數據庫id為文件名保存成html文件,以biz數組為目錄。
1
2
3
4
5
6
7
8
9
10
11
$dir = "./".$biz."/";
$filename = $dir.$id.".html";
if(!is_dir($dir)) {
mkdir($cache_dir);
chmod($cache_dir,0777);
}
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
以上代碼是一個(gè)標準的php構建文件夾保存文件的代碼,大家可以依照自己的實(shí)際情況安排保存方式。
在這以后我們就可以在自己的服務(wù)器上得到一個(gè)html文件,內容就是公眾號的文章內容。我們可以從瀏覽器中打開(kāi)看一下。這時(shí)你或許會(huì )發(fā)覺(jué)圖片防盜鏈了!無(wú)法正常顯示!包括數據庫中保存的文章封面圖,公眾號的頭像都是防盜鏈的。
別急,這個(gè)問(wèn)題挺好解決,只須要將圖片也保存到自己的服務(wù)器,無(wú)非是將來(lái)會(huì )占用自己的服務(wù)器空間和帶寬。
圖片防盜鏈的原理是當圖片在網(wǎng)頁(yè)中顯示的時(shí)侯php 采集微信文章圖片,圖片服務(wù)器會(huì )測量到引用這張圖片的服務(wù)器域名,當發(fā)覺(jué)服務(wù)器域名不包含或的時(shí)侯才會(huì )被替換成防盜鏈圖片。
但是假若測量不到引用頁(yè)面的域名才會(huì )正常顯示,所以我們通過(guò)php的函數file_get_content()就可以將圖片的二進(jìn)制代碼獲取過(guò)來(lái),然后按照自己的看法起個(gè)文件名保存到自己的服務(wù)器上。在這里再介紹一個(gè)保存圖片的方式,我目前使用了騰訊云的“萬(wàn)象優(yōu)圖”,通過(guò)它們提供的api將圖片保存到云空間,這樣的用處是讀取圖片時(shí)直接在圖片的鏈接地址加上希望得到的圖片規格大小參數,就可以直接得到一張縮略圖。比存在自己的服務(wù)器便捷得多。阿里云也應當有同樣的產(chǎn)品php 采集微信文章圖片,好像名叫對象儲存。
另外,我采集公眾號內容的目的是制做成一個(gè)新聞app,在app上將html代碼顯示下來(lái)以后,因為app同樣沒(méi)有域名,防盜鏈服務(wù)器也同樣不會(huì )覺(jué)得圖片被盜鏈了。這樣就可以直接顯示圖片下來(lái)。
wordpress安裝過(guò)程中遇見(jiàn)英文亂碼的處理方式
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 598 次瀏覽 ? 2020-06-17 08:01
WordPress建站 新手入門(mén),wordpress建站W(wǎng)ordPress建站 新手入門(mén)教程系列 1. WordPress入門(mén) 之 什么是WordPress? 2. WordPress入門(mén) 之 搭建WordPress站點(diǎn)須要哪些條件? 3. WordPress入門(mén) 之 如何安裝WordPre
總結關(guān)于WordPress注意點(diǎn)
...務(wù)器端的路由功能應當都比較熟悉,國外流行的博客系統wordpress也是十分精典的路由實(shí)現案例。那么,究竟哪些的路由呢,下面通過(guò)wordpress來(lái)簡(jiǎn)單講一下。理解wordpress重畫(huà)規則的的都是曉得,實(shí)際上任何一條url的訪(fǎng)問(wèn)都是基于wor...
最流行的php建站程序是哪些?
要說(shuō)最流行的php建站程序是哪些?那肯定非wordpress莫屬了。WordPress擁有全球逾三分之一的網(wǎng)站,從大型個(gè)人博客到索尼、時(shí)代公司、紐約郵報和NBC等大公司的復雜網(wǎng)站。WordPress只是網(wǎng)站構建器和內容管理系統之一,...
wordpress須要會(huì )php嗎
WordPress是使用PHP語(yǔ)言開(kāi)發(fā)的博客平臺,用戶(hù)可以在支持PHP和MySQL數據庫的服務(wù)器上架設屬于自己的網(wǎng)站。也可以把 WordPress當成一個(gè)內容管理系統(CMS)來(lái)使用。WordPress是一款個(gè)人博客系統,并逐漸演變成一款內容...
開(kāi)源,棄 PHP 改用 JavaScript_PHP教程
開(kāi)源,棄 PHP 改用 在明天邁出了自創(chuàng )立以來(lái)的最跨越性的一步。Automattic 公司從頭重畫(huà)了 ,將這項計劃命名為 Calypso譯者注:卡呂普索安裝wordpress主題后 顯示亂碼 怎么解決,希臘神話(huà)的海之女神),從內...
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,_PHP教程
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,不知算不算手賤,把VPS服務(wù)器上的php升級到7.0, 雖然7.x與之前的兼容性是很高的,但移除了一大堆過(guò)時(shí)用法,而個(gè)別老應用一直在使用。對個(gè)人wordpress站點(diǎn)里出現...
在Linux系統下一鍵重新安裝WordPress的腳本示例_PHP
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下安裝wordpress主題后 顯示亂碼 怎么解決,完全重新安...
在Linux系統下一鍵重新安裝WordPress的腳本示例_php方法
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下,完全重新安...
wordpress主題制做結構文件,wordpress主題結構_PHP教程
wordpress主題制做結構文件,wordpress主題結構 下面是WordPress主題文件層次結構,它會(huì )告訴你:當WordPress顯示特定的頁(yè)面類(lèi)型時(shí),會(huì )使用那個(gè)模板文件呢?只有了解了以下主題層次結構,你就能曉得你的WordPress主... 查看全部
WordPress建站 新手入門(mén),wordpress建站W(wǎng)ordPress建站 新手入門(mén)教程系列 1. WordPress入門(mén) 之 什么是WordPress? 2. WordPress入門(mén) 之 搭建WordPress站點(diǎn)須要哪些條件? 3. WordPress入門(mén) 之 如何安裝WordPre
總結關(guān)于WordPress注意點(diǎn)
...務(wù)器端的路由功能應當都比較熟悉,國外流行的博客系統wordpress也是十分精典的路由實(shí)現案例。那么,究竟哪些的路由呢,下面通過(guò)wordpress來(lái)簡(jiǎn)單講一下。理解wordpress重畫(huà)規則的的都是曉得,實(shí)際上任何一條url的訪(fǎng)問(wèn)都是基于wor...
最流行的php建站程序是哪些?
要說(shuō)最流行的php建站程序是哪些?那肯定非wordpress莫屬了。WordPress擁有全球逾三分之一的網(wǎng)站,從大型個(gè)人博客到索尼、時(shí)代公司、紐約郵報和NBC等大公司的復雜網(wǎng)站。WordPress只是網(wǎng)站構建器和內容管理系統之一,...
wordpress須要會(huì )php嗎
WordPress是使用PHP語(yǔ)言開(kāi)發(fā)的博客平臺,用戶(hù)可以在支持PHP和MySQL數據庫的服務(wù)器上架設屬于自己的網(wǎng)站。也可以把 WordPress當成一個(gè)內容管理系統(CMS)來(lái)使用。WordPress是一款個(gè)人博客系統,并逐漸演變成一款內容...
開(kāi)源,棄 PHP 改用 JavaScript_PHP教程
開(kāi)源,棄 PHP 改用 在明天邁出了自創(chuàng )立以來(lái)的最跨越性的一步。Automattic 公司從頭重畫(huà)了 ,將這項計劃命名為 Calypso譯者注:卡呂普索安裝wordpress主題后 顯示亂碼 怎么解決,希臘神話(huà)的海之女神),從內...
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,_PHP教程
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,不知算不算手賤,把VPS服務(wù)器上的php升級到7.0, 雖然7.x與之前的兼容性是很高的,但移除了一大堆過(guò)時(shí)用法,而個(gè)別老應用一直在使用。對個(gè)人wordpress站點(diǎn)里出現...
在Linux系統下一鍵重新安裝WordPress的腳本示例_PHP
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下安裝wordpress主題后 顯示亂碼 怎么解決,完全重新安...
在Linux系統下一鍵重新安裝WordPress的腳本示例_php方法
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下,完全重新安...
wordpress主題制做結構文件,wordpress主題結構_PHP教程
wordpress主題制做結構文件,wordpress主題結構 下面是WordPress主題文件層次結構,它會(huì )告訴你:當WordPress顯示特定的頁(yè)面類(lèi)型時(shí),會(huì )使用那個(gè)模板文件呢?只有了解了以下主題層次結構,你就能曉得你的WordPress主...
PHP爬蟲(chóng)編撰
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 418 次瀏覽 ? 2020-06-04 08:04
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特性,利于學(xué)習,使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP 獨特的句型混和了C、Java、Perl以及PHP自創(chuàng )的句型。它可以比CGI或則Perl更快速地執行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP作出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML(標準通用標記語(yǔ)言下的一個(gè)應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優(yōu)化代碼運行php網(wǎng)絡(luò )爬蟲(chóng)軟件,使代碼運行更快?!俣劝倏频拿枋?。
二、爬蟲(chóng)有哪些用?
爬蟲(chóng)有哪些用?先說(shuō)一下爬蟲(chóng)是哪些東西,我覺(jué)得爬蟲(chóng)就是一個(gè)網(wǎng)路信息搜集程序,也許我自己的理解有錯誤,也請你們給我見(jiàn)諒。既然爬蟲(chóng)是一個(gè)網(wǎng)路信息搜集程序,那就是拿來(lái)搜集信息,并且搜集的信息是在網(wǎng)路里面的。如果還是不太清楚爬蟲(chóng)有什么用php網(wǎng)絡(luò )爬蟲(chóng)軟件,我就舉幾個(gè)爬蟲(chóng)應用的事例:搜索引擎就須要爬蟲(chóng)搜集網(wǎng)路信息供人們去搜索;大數據的數據,數據從那里來(lái)?就是可以通過(guò)爬蟲(chóng)在網(wǎng)路中爬?。ㄊ占┒鴣?lái)。
三、通??吹脚老x(chóng)會(huì )想到 Python,但為何我用 PHP,而不用 Python 呢?
Python 我說(shuō)實(shí)話(huà),我不會(huì ) Python。( Python 我真不會(huì ),想知道可能你要去百度一下,因為 Python 我真不會(huì )。)PHP 寫(xiě)東西我仍然都是覺(jué)得,你只要想出算法程序就早已下來(lái)了,不用考慮太多數據類(lèi)型的問(wèn)題。PHP 的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。PHP的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。的看法有錯。)本人雖然也是初學(xué) PHP,想通過(guò)寫(xiě)一些東西提升自己的水平。(下面可能有些代碼會(huì )使你認為不夠規范,歡迎見(jiàn)諒,謝謝。)
四、PHP爬蟲(chóng)第一步
PHP爬蟲(chóng)第一步,第一步......第一步其實(shí)就是搭建 PHP 的運行環(huán)境,沒(méi)有環(huán)境PHP又如何能運行呢?就像蝦不能離開(kāi)水一樣。(我見(jiàn)識還不夠,可能我舉的蝦的事例不夠好,請見(jiàn)諒。)在Windows的系統下我使用 WAMP,而在Linux的系統下我使用 LNMP 或者 LAMP。
WAMP:Windows + Apache + Mysql + PHP
LAMP:Linux + Apache + Mysql + PHP
LNMP:Linux + Nginx + Mysql + PHP
Apache 和 Nginx 是 Web 服務(wù)器軟件。
Apache或Nginx、Mysql 以及 PHP 這些都是 PHP Web 的基本配置環(huán)境。網(wǎng)上有 PHP Web 環(huán)境的安裝包,這些安裝包使用很方便,不需要每給東西安裝以及配置。但若果你對這種集成安裝包害怕安全問(wèn)題,你可以到這種程序的官網(wǎng)下載之后在網(wǎng)上找配置教程就可以了。(說(shuō)真的,我真心的不會(huì )單獨去弄,我認為很麻煩。)
五、 PHP爬蟲(chóng)第二步
(感覺(jué)自己屁話(huà)很多,應該馬上來(lái)一段代碼?。?!)
<?php
// 爬蟲(chóng)核心功能:獲取網(wǎng)頁(yè)源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) php 的 file_get_contents 函數獲取百度首頁(yè)源碼,并傳給 $html 變量
echo $html;
// 輸出 $html
?>
爬蟲(chóng)網(wǎng)路核心功能早已寫(xiě)下來(lái)了,為什么說(shuō)就如此幾行代碼就把爬蟲(chóng)核心功能寫(xiě)下來(lái)了呢?我猜有人早已明白了吧,其實(shí)是因為爬蟲(chóng)是數據獲取的程序,就里面幾行代碼雖然早已才能獲取數據了,所以爬蟲(chóng)的核心功能早已寫(xiě)下來(lái)了??赡苡腥藭?huì )說(shuō)“你這個(gè)也很菜了吧!有哪些用?”,雖然我是太菜,但請別說(shuō)出來(lái),讓我好好裝個(gè)X。(又說(shuō)了兩行屁話(huà),不好意思。)
其實(shí)爬蟲(chóng)是拿來(lái)干嘛,主要看你想使它來(lái)干嘛。就像我前些日子為了好玩寫(xiě)了一個(gè)搜索引擎網(wǎng)站出來(lái),當然網(wǎng)站很菜,結果排序沒(méi)有規律,很多都查不到。我的搜索引擎的爬蟲(chóng)就是要寫(xiě)一個(gè)適合于搜索引擎的爬蟲(chóng)。所以為了便捷我也就用寫(xiě)搜索引擎的爬蟲(chóng)為目標講解。當然了,我搜索引擎的爬蟲(chóng)還是不夠建立,不健全的地方都是要大家自己去創(chuàng )造,去建立。
六、 搜索引擎爬蟲(chóng)的限制
搜索引擎的爬蟲(chóng)有時(shí)候不是不能那種網(wǎng)站的頁(yè)面獲取頁(yè)面源碼,而是有robot.txt文件,有該文件的網(wǎng)站,就代表站主不希望爬蟲(chóng)去爬取頁(yè)面源碼。(不過(guò)若果你就是想要獲取的話(huà),就算有也一樣會(huì )去爬吧?。?br /> 我搜索引擎的爬蟲(chóng)雖然還有好多不足而造成的限制,例如可能由于未能運行 JS 腳本所以未能獲取頁(yè)面源碼。又或則網(wǎng)站有反爬蟲(chóng)的機制引起不能獲取到頁(yè)面源碼。有反爬蟲(chóng)機制的網(wǎng)站就如:知乎,知乎就是有反爬蟲(chóng)的機制的網(wǎng)站。
七、以弄搜索引擎爬蟲(chóng)為例,準備寫(xiě)該爬蟲(chóng)須要的東西
PHP 編寫(xiě)基礎正則表達式(你也可以使用Xpath,對不起,我不會(huì )使用)數據庫的使用(本文使用 MySql 數據庫)運行環(huán)境(只要有能運行 PHP 網(wǎng)站的環(huán)境和數據庫就OK)
八、搜索引擎獲取頁(yè)面源碼并獲取頁(yè)面的標題信息
<?PHP
// 通過(guò) file_get_contents 函數獲取百度頁(yè)面源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) preg_replace 函數使頁(yè)面源碼由多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 通過(guò) preg_match 函數提取獲取頁(yè)面的標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOne,$titleArr);
// 由于 preg_match 函數的結果是數組的形式
$title = $titleArr[1];
// 通過(guò) echo 函數輸出標題信息
echo $title;
?>
報錯誤示例:
Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
https是SSL加密合同,如果出現獲取頁(yè)面晨報里面的錯誤,代表你的 PHP 可能少了OpenSSL 的模塊,你可以到網(wǎng)上查找解決辦法。
九、搜索引擎爬蟲(chóng)的特征
雖然我沒(méi)見(jiàn)過(guò)象“百度”,“Google”它們的爬蟲(chóng),可是我自己通過(guò)推測,以及在實(shí)際爬去過(guò)程當中遇見(jiàn)的一些問(wèn)題,自己總結的幾個(gè)特性。(可能有不對的地方,或者缺乏的地方,歡迎見(jiàn)諒,謝謝。)
通用性
通用性是因為我覺(jué)得搜索引擎的爬蟲(chóng)一開(kāi)始并不是針對哪一個(gè)網(wǎng)站制定的,所以要求能爬取到的網(wǎng)站盡可能的多,這是第一點(diǎn)。而第二點(diǎn),就是獲取網(wǎng)頁(yè)的信息就是這些,一開(kāi)始不會(huì )由于個(gè)別某些特殊小網(wǎng)站而舍棄個(gè)別信息不提取,舉個(gè)反例:一個(gè)小網(wǎng)站的一個(gè)網(wǎng)頁(yè)meta標簽里沒(méi)有描述信息(description)或者關(guān)鍵詞信息(keyword),就直接舍棄了描述信息或則關(guān)鍵詞信息的提取,當然假如真的某一個(gè)頁(yè)面沒(méi)有這種信息我會(huì )提取頁(yè)面里的文字內容作為填充,反正就是盡可能達到爬取的網(wǎng)頁(yè)信息每位網(wǎng)頁(yè)的信息項都要一樣。這是我覺(jué)得的搜索引擎爬蟲(chóng)的通用性,當然我的看法可能是錯誤的。(我說(shuō)得可能不是很好,我仍然在學(xué)習。)
不確定性
不確定性就是我的爬蟲(chóng)獲取哪些網(wǎng)頁(yè)我是控制不夠全面的,只能控制我能想到的情況,這也是由于我寫(xiě)的算法就是這樣的緣由,我的算法就是爬取獲取到的頁(yè)面里的所有鏈接,再去爬去獲取到的那些鏈接,其實(shí)是因為搜索引擎并不是搜某一些東西,而是盡可能的多,因為只有更多的信息,才能找到一個(gè)最貼切用戶(hù)想要的答案。所以我就認為搜索引擎的爬蟲(chóng)就要有不確定性。(我自己再看了一遍,也有點(diǎn)認為自己說(shuō)得有點(diǎn)使自己看不懂,請見(jiàn)諒,歡迎見(jiàn)諒,提問(wèn),謝謝了?。?br /> 下面的視頻是我的搜索網(wǎng)站的使用視頻,而搜到的信息就是通過(guò)自己寫(xiě)的 PHP 爬蟲(chóng)獲取到的。(這個(gè)網(wǎng)站我早已不再繼續維護了,所以有缺乏之處,請見(jiàn)諒。)
十、到如今可能出現的問(wèn)題
獲取的源碼出現亂碼
<?PHP
// 亂碼解決辦法,把其他編碼格式通過(guò) mb_convert_encoding 函數統一轉為 UTF-8 格式
$html = mb_convert_encoding($html,'UTF-8','UTF-8,GBK,GB2312,BIG5');
// 還有一種因為gzip所以出現亂碼的,我會(huì )在以后講
?>
2. 獲取不到標題信息
<?PHP
// 獲取不到標題信息解決辦法,首先判斷是否能獲取到頁(yè)面源碼
// 如果能獲取到但還是不能獲取到標題信息
// 我猜測的問(wèn)題是:因為我教的是使用正則表達式獲取的,源碼沒(méi)有變成一行,獲取起來(lái)就會(huì )出現問(wèn)題
$htmlOneLine=preg_replace("/\r|\n|\t/","",$html);
?>
3.獲取不到頁(yè)面源碼
<?PHP
// 像新浪微博你可能獲取到的是“Sina Visitor System”
// 解決辦法添加header信息
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n",
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 這樣就能獲取到新浪微博的頁(yè)面了
?>
十一、獲取一個(gè)網(wǎng)頁(yè)時(shí)的處理思路
我們先不去想好多網(wǎng)頁(yè),因為好多網(wǎng)頁(yè)也就是一個(gè)循環(huán)。
獲取頁(yè)面源碼通過(guò)源碼提取頁(yè)面的哪些信息提取的信息要如何處理處理后放不放進(jìn)數據庫
十二、按照十一的思路的代碼
<?php
// 一、獲取源碼
// 假設我們要獲取淘寶首頁(yè)
$html = file_get_content("https://www.taobao.com");
// 二、提取標題和文本
// 三、提取信息處理
// 處理頁(yè)面源碼,多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 獲取標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOneLine,$titleArr);
// 保留標題信息
$titleOK = $titleArr[1];
// 獲取頁(yè)面中的文本信息
// 處理前面不需要的head標簽
$htmlText = preg_replace("/<html>(.*)<\/head>/","",$htmlOneLine);
// 處理style和script標簽及內容
$htmlText = preg_replace("/<style(.*)>(.*)</style>|<script(.*)>(.*)</script>/iU","",$htmlText);
// 處理多余標簽
$htmlText = preg_replace("/<(\/)?(.+)>/","",$htmlText);
// 四、保存到數據庫
// 略
?>
十三、PHP 保存頁(yè)面的圖片思路
獲取頁(yè)面源碼獲取頁(yè)面的圖片鏈接使用函數保存圖片
十四、保存圖片示例代碼
<?php
// 使用file_get_contents()函數獲取圖片
$img = file_get_contents("http://127.0.0.1/photo.jpg");
// 使用file_put_contents()函數保存圖片
file_put_contents("photo.jpg",$img);
?>
十五、gzip解壓
本來(lái)我以為自己寫(xiě)的爬蟲(chóng)早已寫(xiě)得差不多了,就是不僅反爬蟲(chóng)的網(wǎng)站難以爬取外,應該是都可以爬了。但有三天我去嘗試爬去bilibili的時(shí)侯出現問(wèn)題了,我發(fā)覺(jué)如何我數據庫上面的都是亂碼,而且標題哪些的都沒(méi)有,好奇怪!后來(lái)我才曉得原先是因為GZIP的壓縮,原來(lái)我直接使用file_get_content函數獲取的頁(yè)面是未經(jīng)過(guò)解壓的頁(yè)面,所有都是亂碼!好了,然后我曉得問(wèn)題出現在哪里了,接下來(lái)就是想解決辦法了。(其實(shí)那時(shí)候的我是完全不知道如何解決解壓gzip的,都靠搜索引擎,哈哈哈哈哈)。
我得到了兩個(gè)解決辦法:
在 request header 那里告訴對方服務(wù)器,我這爬蟲(chóng)(不。。。應該是我這瀏覽器)不支持gzip的解壓,就麻煩你不要壓縮,直接把數據發(fā)給我吧!
// 這是request header(請求頭)
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n".
"accept-encoding:"
)
);
// 我把accept-encodeing(能接收編碼)設為空,代表不接受gzip
2. 如果告訴了對方服務(wù)器本瀏覽器(爬蟲(chóng))不支持解壓gzip,可他還是繼續發(fā)gzip的數據給你,那就沒(méi)有辦法了,只好默默的在搜索引擎找php解壓gzip的解壓函數——gzdecode()。
// 廢話(huà):好久沒(méi)更新了,因為近來(lái)又在重復造輪子,不過(guò)好開(kāi)心-- 2019.01.14
十六、子鏈接的獲取
網(wǎng)頁(yè)爬蟲(chóng)就好比手動(dòng)的網(wǎng)頁(yè)源碼另存為操作,可是假如真的是一個(gè)一個(gè)網(wǎng)址自動(dòng)輸入給爬蟲(chóng)去爬取的話(huà),那還倒不如人手另存為呢!所以在這里就得解析到這些子鏈接,一個(gè)網(wǎng)頁(yè)似乎會(huì )有好多的a標簽,而這種a標簽的href屬性值都會(huì )是一個(gè)子鏈接。(這句如何覺(jué)得有一點(diǎn)屁話(huà)呢?應該你們都曉得吧!)通過(guò)好多種工具的解析得到了原始的子鏈接(我沒(méi)用html的工具,就是用了正則表達式及工具)為什么叫原始數據,因為這些子鏈接有很多不是URL鏈接,又或則是一些不完整的鏈接,又或則你是要爬一個(gè)網(wǎng)站,不要爬蟲(chóng)跑出去的時(shí)侯,還得消除一些并非那種網(wǎng)站的鏈接,防止爬蟲(chóng)跑出去。下面我列出一些原始子鏈接。(其實(shí)就是我噴到的坑。。。)
http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
你可以看得到這兒有很多種鏈接,有完整的絕對路徑的鏈接,也有不完整的相對路徑鏈接,有的還跑來(lái)了javascript,如果是相對路徑或javascript的鏈接,直接給爬蟲(chóng)去爬,肯定使爬蟲(chóng)一臉懵,因為不完整或根本就不是一個(gè)鏈接。所以就須要對子鏈接補全或則扔掉。
十七、子鏈接的處理
上面屁話(huà)了一大堆后,接下來(lái)還是繼續屁話(huà)。好了,處理雖然就是去重、丟棄以及補全。
對于相同的子鏈接遺棄不保存對于相對路徑鏈接補全對于不是鏈接的鏈接遺棄(不是鏈接的鏈接是哪些東西?自己都認為的奇怪。。。。)
對于第一種我就不多說(shuō)了,相信你們都曉得該如何做。
對付第二種的方式我就寫(xiě)一個(gè)才能運行相對路徑的方式下來(lái)就OK了,通過(guò)父鏈接來(lái)進(jìn)行相對路徑轉絕對路徑。(有空補代碼給你們。。。不好意思了)
對于第三種也正則匹配一下就完了。 查看全部
一、PHP 是哪些東西?
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特性,利于學(xué)習,使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP 獨特的句型混和了C、Java、Perl以及PHP自創(chuàng )的句型。它可以比CGI或則Perl更快速地執行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP作出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML(標準通用標記語(yǔ)言下的一個(gè)應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優(yōu)化代碼運行php網(wǎng)絡(luò )爬蟲(chóng)軟件,使代碼運行更快?!俣劝倏频拿枋?。
二、爬蟲(chóng)有哪些用?
爬蟲(chóng)有哪些用?先說(shuō)一下爬蟲(chóng)是哪些東西,我覺(jué)得爬蟲(chóng)就是一個(gè)網(wǎng)路信息搜集程序,也許我自己的理解有錯誤,也請你們給我見(jiàn)諒。既然爬蟲(chóng)是一個(gè)網(wǎng)路信息搜集程序,那就是拿來(lái)搜集信息,并且搜集的信息是在網(wǎng)路里面的。如果還是不太清楚爬蟲(chóng)有什么用php網(wǎng)絡(luò )爬蟲(chóng)軟件,我就舉幾個(gè)爬蟲(chóng)應用的事例:搜索引擎就須要爬蟲(chóng)搜集網(wǎng)路信息供人們去搜索;大數據的數據,數據從那里來(lái)?就是可以通過(guò)爬蟲(chóng)在網(wǎng)路中爬?。ㄊ占┒鴣?lái)。
三、通??吹脚老x(chóng)會(huì )想到 Python,但為何我用 PHP,而不用 Python 呢?
Python 我說(shuō)實(shí)話(huà),我不會(huì ) Python。( Python 我真不會(huì ),想知道可能你要去百度一下,因為 Python 我真不會(huì )。)PHP 寫(xiě)東西我仍然都是覺(jué)得,你只要想出算法程序就早已下來(lái)了,不用考慮太多數據類(lèi)型的問(wèn)題。PHP 的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。PHP的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。的看法有錯。)本人雖然也是初學(xué) PHP,想通過(guò)寫(xiě)一些東西提升自己的水平。(下面可能有些代碼會(huì )使你認為不夠規范,歡迎見(jiàn)諒,謝謝。)
四、PHP爬蟲(chóng)第一步
PHP爬蟲(chóng)第一步,第一步......第一步其實(shí)就是搭建 PHP 的運行環(huán)境,沒(méi)有環(huán)境PHP又如何能運行呢?就像蝦不能離開(kāi)水一樣。(我見(jiàn)識還不夠,可能我舉的蝦的事例不夠好,請見(jiàn)諒。)在Windows的系統下我使用 WAMP,而在Linux的系統下我使用 LNMP 或者 LAMP。
WAMP:Windows + Apache + Mysql + PHP
LAMP:Linux + Apache + Mysql + PHP
LNMP:Linux + Nginx + Mysql + PHP
Apache 和 Nginx 是 Web 服務(wù)器軟件。
Apache或Nginx、Mysql 以及 PHP 這些都是 PHP Web 的基本配置環(huán)境。網(wǎng)上有 PHP Web 環(huán)境的安裝包,這些安裝包使用很方便,不需要每給東西安裝以及配置。但若果你對這種集成安裝包害怕安全問(wèn)題,你可以到這種程序的官網(wǎng)下載之后在網(wǎng)上找配置教程就可以了。(說(shuō)真的,我真心的不會(huì )單獨去弄,我認為很麻煩。)
五、 PHP爬蟲(chóng)第二步
(感覺(jué)自己屁話(huà)很多,應該馬上來(lái)一段代碼?。?!)
<?php
// 爬蟲(chóng)核心功能:獲取網(wǎng)頁(yè)源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) php 的 file_get_contents 函數獲取百度首頁(yè)源碼,并傳給 $html 變量
echo $html;
// 輸出 $html
?>
爬蟲(chóng)網(wǎng)路核心功能早已寫(xiě)下來(lái)了,為什么說(shuō)就如此幾行代碼就把爬蟲(chóng)核心功能寫(xiě)下來(lái)了呢?我猜有人早已明白了吧,其實(shí)是因為爬蟲(chóng)是數據獲取的程序,就里面幾行代碼雖然早已才能獲取數據了,所以爬蟲(chóng)的核心功能早已寫(xiě)下來(lái)了??赡苡腥藭?huì )說(shuō)“你這個(gè)也很菜了吧!有哪些用?”,雖然我是太菜,但請別說(shuō)出來(lái),讓我好好裝個(gè)X。(又說(shuō)了兩行屁話(huà),不好意思。)
其實(shí)爬蟲(chóng)是拿來(lái)干嘛,主要看你想使它來(lái)干嘛。就像我前些日子為了好玩寫(xiě)了一個(gè)搜索引擎網(wǎng)站出來(lái),當然網(wǎng)站很菜,結果排序沒(méi)有規律,很多都查不到。我的搜索引擎的爬蟲(chóng)就是要寫(xiě)一個(gè)適合于搜索引擎的爬蟲(chóng)。所以為了便捷我也就用寫(xiě)搜索引擎的爬蟲(chóng)為目標講解。當然了,我搜索引擎的爬蟲(chóng)還是不夠建立,不健全的地方都是要大家自己去創(chuàng )造,去建立。
六、 搜索引擎爬蟲(chóng)的限制
搜索引擎的爬蟲(chóng)有時(shí)候不是不能那種網(wǎng)站的頁(yè)面獲取頁(yè)面源碼,而是有robot.txt文件,有該文件的網(wǎng)站,就代表站主不希望爬蟲(chóng)去爬取頁(yè)面源碼。(不過(guò)若果你就是想要獲取的話(huà),就算有也一樣會(huì )去爬吧?。?br /> 我搜索引擎的爬蟲(chóng)雖然還有好多不足而造成的限制,例如可能由于未能運行 JS 腳本所以未能獲取頁(yè)面源碼。又或則網(wǎng)站有反爬蟲(chóng)的機制引起不能獲取到頁(yè)面源碼。有反爬蟲(chóng)機制的網(wǎng)站就如:知乎,知乎就是有反爬蟲(chóng)的機制的網(wǎng)站。
七、以弄搜索引擎爬蟲(chóng)為例,準備寫(xiě)該爬蟲(chóng)須要的東西
PHP 編寫(xiě)基礎正則表達式(你也可以使用Xpath,對不起,我不會(huì )使用)數據庫的使用(本文使用 MySql 數據庫)運行環(huán)境(只要有能運行 PHP 網(wǎng)站的環(huán)境和數據庫就OK)
八、搜索引擎獲取頁(yè)面源碼并獲取頁(yè)面的標題信息
<?PHP
// 通過(guò) file_get_contents 函數獲取百度頁(yè)面源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) preg_replace 函數使頁(yè)面源碼由多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 通過(guò) preg_match 函數提取獲取頁(yè)面的標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOne,$titleArr);
// 由于 preg_match 函數的結果是數組的形式
$title = $titleArr[1];
// 通過(guò) echo 函數輸出標題信息
echo $title;
?>
報錯誤示例:
Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
https是SSL加密合同,如果出現獲取頁(yè)面晨報里面的錯誤,代表你的 PHP 可能少了OpenSSL 的模塊,你可以到網(wǎng)上查找解決辦法。
九、搜索引擎爬蟲(chóng)的特征
雖然我沒(méi)見(jiàn)過(guò)象“百度”,“Google”它們的爬蟲(chóng),可是我自己通過(guò)推測,以及在實(shí)際爬去過(guò)程當中遇見(jiàn)的一些問(wèn)題,自己總結的幾個(gè)特性。(可能有不對的地方,或者缺乏的地方,歡迎見(jiàn)諒,謝謝。)
通用性
通用性是因為我覺(jué)得搜索引擎的爬蟲(chóng)一開(kāi)始并不是針對哪一個(gè)網(wǎng)站制定的,所以要求能爬取到的網(wǎng)站盡可能的多,這是第一點(diǎn)。而第二點(diǎn),就是獲取網(wǎng)頁(yè)的信息就是這些,一開(kāi)始不會(huì )由于個(gè)別某些特殊小網(wǎng)站而舍棄個(gè)別信息不提取,舉個(gè)反例:一個(gè)小網(wǎng)站的一個(gè)網(wǎng)頁(yè)meta標簽里沒(méi)有描述信息(description)或者關(guān)鍵詞信息(keyword),就直接舍棄了描述信息或則關(guān)鍵詞信息的提取,當然假如真的某一個(gè)頁(yè)面沒(méi)有這種信息我會(huì )提取頁(yè)面里的文字內容作為填充,反正就是盡可能達到爬取的網(wǎng)頁(yè)信息每位網(wǎng)頁(yè)的信息項都要一樣。這是我覺(jué)得的搜索引擎爬蟲(chóng)的通用性,當然我的看法可能是錯誤的。(我說(shuō)得可能不是很好,我仍然在學(xué)習。)
不確定性
不確定性就是我的爬蟲(chóng)獲取哪些網(wǎng)頁(yè)我是控制不夠全面的,只能控制我能想到的情況,這也是由于我寫(xiě)的算法就是這樣的緣由,我的算法就是爬取獲取到的頁(yè)面里的所有鏈接,再去爬去獲取到的那些鏈接,其實(shí)是因為搜索引擎并不是搜某一些東西,而是盡可能的多,因為只有更多的信息,才能找到一個(gè)最貼切用戶(hù)想要的答案。所以我就認為搜索引擎的爬蟲(chóng)就要有不確定性。(我自己再看了一遍,也有點(diǎn)認為自己說(shuō)得有點(diǎn)使自己看不懂,請見(jiàn)諒,歡迎見(jiàn)諒,提問(wèn),謝謝了?。?br /> 下面的視頻是我的搜索網(wǎng)站的使用視頻,而搜到的信息就是通過(guò)自己寫(xiě)的 PHP 爬蟲(chóng)獲取到的。(這個(gè)網(wǎng)站我早已不再繼續維護了,所以有缺乏之處,請見(jiàn)諒。)

十、到如今可能出現的問(wèn)題
獲取的源碼出現亂碼
<?PHP
// 亂碼解決辦法,把其他編碼格式通過(guò) mb_convert_encoding 函數統一轉為 UTF-8 格式
$html = mb_convert_encoding($html,'UTF-8','UTF-8,GBK,GB2312,BIG5');
// 還有一種因為gzip所以出現亂碼的,我會(huì )在以后講
?>
2. 獲取不到標題信息
<?PHP
// 獲取不到標題信息解決辦法,首先判斷是否能獲取到頁(yè)面源碼
// 如果能獲取到但還是不能獲取到標題信息
// 我猜測的問(wèn)題是:因為我教的是使用正則表達式獲取的,源碼沒(méi)有變成一行,獲取起來(lái)就會(huì )出現問(wèn)題
$htmlOneLine=preg_replace("/\r|\n|\t/","",$html);
?>
3.獲取不到頁(yè)面源碼
<?PHP
// 像新浪微博你可能獲取到的是“Sina Visitor System”
// 解決辦法添加header信息
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n",
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 這樣就能獲取到新浪微博的頁(yè)面了
?>
十一、獲取一個(gè)網(wǎng)頁(yè)時(shí)的處理思路
我們先不去想好多網(wǎng)頁(yè),因為好多網(wǎng)頁(yè)也就是一個(gè)循環(huán)。
獲取頁(yè)面源碼通過(guò)源碼提取頁(yè)面的哪些信息提取的信息要如何處理處理后放不放進(jìn)數據庫
十二、按照十一的思路的代碼
<?php
// 一、獲取源碼
// 假設我們要獲取淘寶首頁(yè)
$html = file_get_content("https://www.taobao.com");
// 二、提取標題和文本
// 三、提取信息處理
// 處理頁(yè)面源碼,多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 獲取標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOneLine,$titleArr);
// 保留標題信息
$titleOK = $titleArr[1];
// 獲取頁(yè)面中的文本信息
// 處理前面不需要的head標簽
$htmlText = preg_replace("/<html>(.*)<\/head>/","",$htmlOneLine);
// 處理style和script標簽及內容
$htmlText = preg_replace("/<style(.*)>(.*)</style>|<script(.*)>(.*)</script>/iU","",$htmlText);
// 處理多余標簽
$htmlText = preg_replace("/<(\/)?(.+)>/","",$htmlText);
// 四、保存到數據庫
// 略
?>
十三、PHP 保存頁(yè)面的圖片思路
獲取頁(yè)面源碼獲取頁(yè)面的圖片鏈接使用函數保存圖片
十四、保存圖片示例代碼
<?php
// 使用file_get_contents()函數獲取圖片
$img = file_get_contents("http://127.0.0.1/photo.jpg");
// 使用file_put_contents()函數保存圖片
file_put_contents("photo.jpg",$img);
?>
十五、gzip解壓
本來(lái)我以為自己寫(xiě)的爬蟲(chóng)早已寫(xiě)得差不多了,就是不僅反爬蟲(chóng)的網(wǎng)站難以爬取外,應該是都可以爬了。但有三天我去嘗試爬去bilibili的時(shí)侯出現問(wèn)題了,我發(fā)覺(jué)如何我數據庫上面的都是亂碼,而且標題哪些的都沒(méi)有,好奇怪!后來(lái)我才曉得原先是因為GZIP的壓縮,原來(lái)我直接使用file_get_content函數獲取的頁(yè)面是未經(jīng)過(guò)解壓的頁(yè)面,所有都是亂碼!好了,然后我曉得問(wèn)題出現在哪里了,接下來(lái)就是想解決辦法了。(其實(shí)那時(shí)候的我是完全不知道如何解決解壓gzip的,都靠搜索引擎,哈哈哈哈哈)。
我得到了兩個(gè)解決辦法:
在 request header 那里告訴對方服務(wù)器,我這爬蟲(chóng)(不。。。應該是我這瀏覽器)不支持gzip的解壓,就麻煩你不要壓縮,直接把數據發(fā)給我吧!
// 這是request header(請求頭)
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n".
"accept-encoding:"
)
);
// 我把accept-encodeing(能接收編碼)設為空,代表不接受gzip
2. 如果告訴了對方服務(wù)器本瀏覽器(爬蟲(chóng))不支持解壓gzip,可他還是繼續發(fā)gzip的數據給你,那就沒(méi)有辦法了,只好默默的在搜索引擎找php解壓gzip的解壓函數——gzdecode()。
// 廢話(huà):好久沒(méi)更新了,因為近來(lái)又在重復造輪子,不過(guò)好開(kāi)心-- 2019.01.14
十六、子鏈接的獲取
網(wǎng)頁(yè)爬蟲(chóng)就好比手動(dòng)的網(wǎng)頁(yè)源碼另存為操作,可是假如真的是一個(gè)一個(gè)網(wǎng)址自動(dòng)輸入給爬蟲(chóng)去爬取的話(huà),那還倒不如人手另存為呢!所以在這里就得解析到這些子鏈接,一個(gè)網(wǎng)頁(yè)似乎會(huì )有好多的a標簽,而這種a標簽的href屬性值都會(huì )是一個(gè)子鏈接。(這句如何覺(jué)得有一點(diǎn)屁話(huà)呢?應該你們都曉得吧!)通過(guò)好多種工具的解析得到了原始的子鏈接(我沒(méi)用html的工具,就是用了正則表達式及工具)為什么叫原始數據,因為這些子鏈接有很多不是URL鏈接,又或則是一些不完整的鏈接,又或則你是要爬一個(gè)網(wǎng)站,不要爬蟲(chóng)跑出去的時(shí)侯,還得消除一些并非那種網(wǎng)站的鏈接,防止爬蟲(chóng)跑出去。下面我列出一些原始子鏈接。(其實(shí)就是我噴到的坑。。。)
http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
你可以看得到這兒有很多種鏈接,有完整的絕對路徑的鏈接,也有不完整的相對路徑鏈接,有的還跑來(lái)了javascript,如果是相對路徑或javascript的鏈接,直接給爬蟲(chóng)去爬,肯定使爬蟲(chóng)一臉懵,因為不完整或根本就不是一個(gè)鏈接。所以就須要對子鏈接補全或則扔掉。
十七、子鏈接的處理
上面屁話(huà)了一大堆后,接下來(lái)還是繼續屁話(huà)。好了,處理雖然就是去重、丟棄以及補全。
對于相同的子鏈接遺棄不保存對于相對路徑鏈接補全對于不是鏈接的鏈接遺棄(不是鏈接的鏈接是哪些東西?自己都認為的奇怪。。。。)
對于第一種我就不多說(shuō)了,相信你們都曉得該如何做。
對付第二種的方式我就寫(xiě)一個(gè)才能運行相對路徑的方式下來(lái)就OK了,通過(guò)父鏈接來(lái)進(jìn)行相對路徑轉絕對路徑。(有空補代碼給你們。。。不好意思了)
對于第三種也正則匹配一下就完了。
一個(gè)簡(jiǎn)單的開(kāi)源PHP爬蟲(chóng)框架『Phpfetcher』
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 482 次瀏覽 ? 2020-05-27 08:02
fanfank 文章作者
完整的代碼貼下來(lái)我看一下,或者在微博私信我,我幫你看一下
aa
//下面兩行促使這個(gè)項目被下載出來(lái)后本文件能直接運行
$demo_include_path = dirname(__FILE__) . ‘/../’;
set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
require_once(‘phpfetcher.php’);
class mycrawler extends Phpfetcher_Crawler_Default {
public function handlePage($page) {
var_dump($page);
//打印處當前頁(yè)面的第1個(gè)h1標題內榮(下標從0開(kāi)始)
$strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo $page->sel(‘//title’, 0)->plaintext;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
//任務(wù)的名子隨意起,這里把名子叫qqnews
//the key is the name of a job, here names it qqnews
‘qqnews’ => array(
‘start_page’ => ‘#8217;, //起始網(wǎng)頁(yè)
‘link_rules’ => array(
/*
* 所有在這里列舉的正則規則,只要能匹配到超鏈接,那么那條爬蟲(chóng)才會(huì )爬到那條超鏈接
* Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
*/
//’#news\.qq\.com/a/\d+/\d+\.htm$#’,
),
//爬蟲(chóng)從開(kāi)始頁(yè)面算起,最多爬取的深度,設置為2表示爬取深度為1
//Crawler’s max following depth, 1 stands for only crawl the start page
‘max_depth’ => 1,
) ,
);
$crawler->setFetchJobs($arrJobs)->run(); //這一行的療效和下邊兩行的療效一樣
其他的沒(méi)變
aa
public function read() {
$this->_strContent = curl_exec($this->_curlHandle);
是_strContent取到了false造成的 這個(gè)是啥緣由呢Page default.php
fanfank 文章作者
我這兒返回的是403 forbidden,查了一下曉得緣由了,因為user_agent的問(wèn)題csdn把爬蟲(chóng)給禁了。你可以這樣更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,當然你可以可以改得更真實(shí)一點(diǎn),例如哪些『Mozilla/5.0 AppleWebKit』之類(lèi)的
有些網(wǎng)站會(huì )依照UA來(lái)屏蔽懇求,可能是因為個(gè)別UA有惡意功擊的特點(diǎn),或者一些爬蟲(chóng)之類(lèi)的開(kāi)源爬蟲(chóng)框架,之前百度有一段時(shí)間屏蔽360瀏覽器就是通過(guò)360瀏覽器里一些特定的UA來(lái)做到的,當然后來(lái)360瀏覽器把UA給更改嗯,就須要依照其它特點(diǎn)屏蔽了。
所以你這兒先改一下user_agent吧。
aa
多謝哈
試著(zhù)改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
試了這兒的也不行 恐怕還是curl的問(wèn)題
fanfank 文章作者
我這兒執行都是正常的,結果也能下來(lái)。還是通過(guò)微博私信說(shuō)吧,這里說(shuō)得刷屏了
aa
圍脖id是?
fanfank 文章作者
另外是,你貼的代碼上面,標點(diǎn)符號不對啊,你的start_page對應那一行的標點(diǎn),怎么是英文的單冒號?后面的單冒號似乎也不是個(gè)單冒號吧?要全部用英語(yǔ)的單冒號才行。
aa
符號是對的哈 都是英語(yǔ)的 沒(méi)句型錯誤
joke
為什么匹配的內容都一樣?
代碼:
sel(‘//span[@id=”text110″]’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo “”;
echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
echo “”;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
‘joke’ => array(
‘start_page’ => ‘#8217;,
‘link_rules’ => array(
‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
),
‘max_depth’ => 2,
) ,
);
$crawler->setFetchJobs($arrJobs)->run();
fanfank 文章作者
你的代碼沒(méi)貼全,而且匹配的內容都一樣我沒(méi)很理解是哪些意思,這個(gè)問(wèn)題有點(diǎn)長(cháng),你直接在微博私信我,我幫你看一下
fanfank 文章作者
已經(jīng)修補了。之前的問(wèn)題是爬蟲(chóng)不認識站內鏈接,例如有的超鏈接是『/entry』這樣的,而不是『』?,F在最新的Phpfetcher早已就能辨識站內鏈接,可以試一下
joke
謝謝 ,搞定了
modejun
樓主您好,問(wèn)問(wèn)假如我曉得了一個(gè)網(wǎng)站開(kāi)源爬蟲(chóng)框架,但是要遞交post參數,這個(gè)要如何弄呢,朋友提供一下思路
fanfank 文章作者
提交post參數,那覺(jué)得場(chǎng)景很特殊的,因為這個(gè)就不是單純地按照鏈接爬取網(wǎng)頁(yè)內容了,而且假如真的提供這個(gè)功能,針對什么樣的鏈接什么樣的參數,怎么遞交,然后返回的內容是如何處理這種,目前我覺(jué)得似乎不太適宜爬蟲(chóng)做?;蛘吣阍谖⒉┧叫盼?,告訴我你的使用場(chǎng)景是哪些,我瞧瞧是不是考慮找時(shí)間加進(jìn)去
modejun
場(chǎng)景就是有一翻頁(yè)時(shí)用ajax post遞交的page參數,如果是get就太easy。還有順便問(wèn)問(wèn),如果翻頁(yè)我明天試了要解決的話(huà)就是調節深度,但是似乎最大是20,還有就是更改正則循環(huán)調用setFetchJobs這個(gè)方式,總是覺(jué)得不是這么完美,有哪些好的思路解決翻頁(yè)這個(gè)問(wèn)題嗎,現在公司在定方案我想多了解把這個(gè)框架的優(yōu)勢發(fā)揮下來(lái),感謝了。
fanfank 文章作者
如果像你說(shuō)的是個(gè)post懇求,那么它返回的應當不是一個(gè)HTML格式的文檔,通常都是json格式的,然后由當前頁(yè)面將異步返回的內容加載顯示下來(lái)。
你們的post懇求應當是有類(lèi)似pn,rn等參數,如果大家僅僅是想領(lǐng)到post懇求的所有內容,可以直接寫(xiě)一個(gè)for循環(huán),然后使用php的curl來(lái)直接發(fā)送post懇求獲取每一個(gè)頁(yè)面內容,可以不使用爬蟲(chóng),因為這個(gè)爬蟲(chóng)基本原理是針對GET懇求返回的HTML頁(yè)面的,然后手動(dòng)抽取HTML的標簽
最大深度可以更改類(lèi)『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』變量,把20改成-1就沒(méi)有限制了,不過(guò)建議還是設一個(gè)上限比較好
可以不需要循環(huán)更改正則呀,設置正則規則的可以是一個(gè)鏈表,把上面的所有你認為合適的正則都列上就可以,除非說(shuō)你的正則表達式還得依據頁(yè)面的某個(gè)參數或則內容不同而更改,那這個(gè)情況還是相對特殊了一點(diǎn)···
翻頁(yè)的解決,如果是GET就用爬蟲(chóng),如果是POST,那么直接for循環(huán)之后調用curl會(huì )更好。
??;;;
好像不錯
??;;;
能不能寫(xiě)個(gè)DOM選擇器和技巧的文檔,最好支持css選擇DOM標簽,有子節點(diǎn),父節點(diǎn),兄弟節點(diǎn)選擇才好
fanfank 文章作者
在這個(gè)項目的github頁(yè)面:,中文說(shuō)明的第2節上面,有介紹dom選擇器的文檔
jeremy
博主。。為什么https的頁(yè)面沒(méi)辦法懇求呢? 查看全部
報dom為空

fanfank 文章作者
完整的代碼貼下來(lái)我看一下,或者在微博私信我,我幫你看一下

aa
//下面兩行促使這個(gè)項目被下載出來(lái)后本文件能直接運行
$demo_include_path = dirname(__FILE__) . ‘/../’;
set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
require_once(‘phpfetcher.php’);
class mycrawler extends Phpfetcher_Crawler_Default {
public function handlePage($page) {
var_dump($page);
//打印處當前頁(yè)面的第1個(gè)h1標題內榮(下標從0開(kāi)始)
$strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo $page->sel(‘//title’, 0)->plaintext;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
//任務(wù)的名子隨意起,這里把名子叫qqnews
//the key is the name of a job, here names it qqnews
‘qqnews’ => array(
‘start_page’ => ‘#8217;, //起始網(wǎng)頁(yè)
‘link_rules’ => array(
/*
* 所有在這里列舉的正則規則,只要能匹配到超鏈接,那么那條爬蟲(chóng)才會(huì )爬到那條超鏈接
* Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
*/
//’#news\.qq\.com/a/\d+/\d+\.htm$#’,
),
//爬蟲(chóng)從開(kāi)始頁(yè)面算起,最多爬取的深度,設置為2表示爬取深度為1
//Crawler’s max following depth, 1 stands for only crawl the start page
‘max_depth’ => 1,
) ,
);
$crawler->setFetchJobs($arrJobs)->run(); //這一行的療效和下邊兩行的療效一樣
其他的沒(méi)變

aa
public function read() {
$this->_strContent = curl_exec($this->_curlHandle);
是_strContent取到了false造成的 這個(gè)是啥緣由呢Page default.php

fanfank 文章作者
我這兒返回的是403 forbidden,查了一下曉得緣由了,因為user_agent的問(wèn)題csdn把爬蟲(chóng)給禁了。你可以這樣更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,當然你可以可以改得更真實(shí)一點(diǎn),例如哪些『Mozilla/5.0 AppleWebKit』之類(lèi)的
有些網(wǎng)站會(huì )依照UA來(lái)屏蔽懇求,可能是因為個(gè)別UA有惡意功擊的特點(diǎn),或者一些爬蟲(chóng)之類(lèi)的開(kāi)源爬蟲(chóng)框架,之前百度有一段時(shí)間屏蔽360瀏覽器就是通過(guò)360瀏覽器里一些特定的UA來(lái)做到的,當然后來(lái)360瀏覽器把UA給更改嗯,就須要依照其它特點(diǎn)屏蔽了。
所以你這兒先改一下user_agent吧。

aa
多謝哈
試著(zhù)改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
試了這兒的也不行 恐怕還是curl的問(wèn)題

fanfank 文章作者
我這兒執行都是正常的,結果也能下來(lái)。還是通過(guò)微博私信說(shuō)吧,這里說(shuō)得刷屏了

aa
圍脖id是?

fanfank 文章作者
另外是,你貼的代碼上面,標點(diǎn)符號不對啊,你的start_page對應那一行的標點(diǎn),怎么是英文的單冒號?后面的單冒號似乎也不是個(gè)單冒號吧?要全部用英語(yǔ)的單冒號才行。

aa
符號是對的哈 都是英語(yǔ)的 沒(méi)句型錯誤

joke
為什么匹配的內容都一樣?
代碼:
sel(‘//span[@id=”text110″]’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo “”;
echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
echo “”;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
‘joke’ => array(
‘start_page’ => ‘#8217;,
‘link_rules’ => array(
‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
),
‘max_depth’ => 2,
) ,
);
$crawler->setFetchJobs($arrJobs)->run();

fanfank 文章作者
你的代碼沒(méi)貼全,而且匹配的內容都一樣我沒(méi)很理解是哪些意思,這個(gè)問(wèn)題有點(diǎn)長(cháng),你直接在微博私信我,我幫你看一下

fanfank 文章作者
已經(jīng)修補了。之前的問(wèn)題是爬蟲(chóng)不認識站內鏈接,例如有的超鏈接是『/entry』這樣的,而不是『』?,F在最新的Phpfetcher早已就能辨識站內鏈接,可以試一下

joke
謝謝 ,搞定了

modejun
樓主您好,問(wèn)問(wèn)假如我曉得了一個(gè)網(wǎng)站開(kāi)源爬蟲(chóng)框架,但是要遞交post參數,這個(gè)要如何弄呢,朋友提供一下思路

fanfank 文章作者
提交post參數,那覺(jué)得場(chǎng)景很特殊的,因為這個(gè)就不是單純地按照鏈接爬取網(wǎng)頁(yè)內容了,而且假如真的提供這個(gè)功能,針對什么樣的鏈接什么樣的參數,怎么遞交,然后返回的內容是如何處理這種,目前我覺(jué)得似乎不太適宜爬蟲(chóng)做?;蛘吣阍谖⒉┧叫盼?,告訴我你的使用場(chǎng)景是哪些,我瞧瞧是不是考慮找時(shí)間加進(jìn)去

modejun
場(chǎng)景就是有一翻頁(yè)時(shí)用ajax post遞交的page參數,如果是get就太easy。還有順便問(wèn)問(wèn),如果翻頁(yè)我明天試了要解決的話(huà)就是調節深度,但是似乎最大是20,還有就是更改正則循環(huán)調用setFetchJobs這個(gè)方式,總是覺(jué)得不是這么完美,有哪些好的思路解決翻頁(yè)這個(gè)問(wèn)題嗎,現在公司在定方案我想多了解把這個(gè)框架的優(yōu)勢發(fā)揮下來(lái),感謝了。

fanfank 文章作者
如果像你說(shuō)的是個(gè)post懇求,那么它返回的應當不是一個(gè)HTML格式的文檔,通常都是json格式的,然后由當前頁(yè)面將異步返回的內容加載顯示下來(lái)。
你們的post懇求應當是有類(lèi)似pn,rn等參數,如果大家僅僅是想領(lǐng)到post懇求的所有內容,可以直接寫(xiě)一個(gè)for循環(huán),然后使用php的curl來(lái)直接發(fā)送post懇求獲取每一個(gè)頁(yè)面內容,可以不使用爬蟲(chóng),因為這個(gè)爬蟲(chóng)基本原理是針對GET懇求返回的HTML頁(yè)面的,然后手動(dòng)抽取HTML的標簽
最大深度可以更改類(lèi)『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』變量,把20改成-1就沒(méi)有限制了,不過(guò)建議還是設一個(gè)上限比較好
可以不需要循環(huán)更改正則呀,設置正則規則的可以是一個(gè)鏈表,把上面的所有你認為合適的正則都列上就可以,除非說(shuō)你的正則表達式還得依據頁(yè)面的某個(gè)參數或則內容不同而更改,那這個(gè)情況還是相對特殊了一點(diǎn)···
翻頁(yè)的解決,如果是GET就用爬蟲(chóng),如果是POST,那么直接for循環(huán)之后調用curl會(huì )更好。

??;;;
好像不錯

??;;;
能不能寫(xiě)個(gè)DOM選擇器和技巧的文檔,最好支持css選擇DOM標簽,有子節點(diǎn),父節點(diǎn),兄弟節點(diǎn)選擇才好

fanfank 文章作者
在這個(gè)項目的github頁(yè)面:,中文說(shuō)明的第2節上面,有介紹dom選擇器的文檔

jeremy
博主。。為什么https的頁(yè)面沒(méi)辦法懇求呢?
phpspider: 《我用爬蟲(chóng)三天時(shí)間“偷了”知乎一百萬(wàn)用戶(hù)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 461 次瀏覽 ? 2020-05-20 08:01
phpspider是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用本框架爬蟲(chóng)技術(shù)用什么語(yǔ)言,你不用了解爬蟲(chóng)的底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽、有些網(wǎng)站需要登入或驗證碼識別才會(huì )爬取等問(wèn)題。簡(jiǎn)單幾行PHP代碼,就可以創(chuàng )建自己的爬蟲(chóng),利用框架封裝的多進(jìn)程Worker解釋器,代碼更簡(jiǎn)練,執行效率更高速率更快。
demo目錄下有一些特定網(wǎng)站的爬取規則,只要你安裝了PHP環(huán)境,代碼就可以在命令行下直接跑。 對爬蟲(chóng)感興趣的開(kāi)發(fā)者可以加QQ群一起討論:147824717。
下面以糗事百科為例, 來(lái)看一下我們的爬蟲(chóng)長(cháng)哪些樣子:
$configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取內容頁(yè)的文章內容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取內容頁(yè)的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
爬蟲(chóng)的整體框架就是這樣, 首先定義了一個(gè)$configs鏈表, 里面設置了待爬網(wǎng)站的一些信息, 然后通過(guò)調用$spider = new phpspider($configs);和$spider->start();來(lái)配置并啟動(dòng)爬蟲(chóng).
更多詳盡內容爬蟲(chóng)技術(shù)用什么語(yǔ)言,移步到:
開(kāi)發(fā)文檔 查看全部
《我用爬蟲(chóng)三天時(shí)間“偷了”知乎一百萬(wàn)用戶(hù),只為證明PHP是世界上最好的語(yǔ)言 》所使用的程序
phpspider是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用本框架爬蟲(chóng)技術(shù)用什么語(yǔ)言,你不用了解爬蟲(chóng)的底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽、有些網(wǎng)站需要登入或驗證碼識別才會(huì )爬取等問(wèn)題。簡(jiǎn)單幾行PHP代碼,就可以創(chuàng )建自己的爬蟲(chóng),利用框架封裝的多進(jìn)程Worker解釋器,代碼更簡(jiǎn)練,執行效率更高速率更快。
demo目錄下有一些特定網(wǎng)站的爬取規則,只要你安裝了PHP環(huán)境,代碼就可以在命令行下直接跑。 對爬蟲(chóng)感興趣的開(kāi)發(fā)者可以加QQ群一起討論:147824717。
下面以糗事百科為例, 來(lái)看一下我們的爬蟲(chóng)長(cháng)哪些樣子:
$configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取內容頁(yè)的文章內容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取內容頁(yè)的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
爬蟲(chóng)的整體框架就是這樣, 首先定義了一個(gè)$configs鏈表, 里面設置了待爬網(wǎng)站的一些信息, 然后通過(guò)調用$spider = new phpspider($configs);和$spider->start();來(lái)配置并啟動(dòng)爬蟲(chóng).

更多詳盡內容爬蟲(chóng)技術(shù)用什么語(yǔ)言,移步到:
開(kāi)發(fā)文檔
phpcms跟dedecms比較
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 460 次瀏覽 ? 2020-04-26 11:01
首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。 查看全部
現在做一個(gè)網(wǎng)站是越來(lái)越容易了,很多公司和個(gè)人站長(cháng)開(kāi)始使用內容管理系統,在CMS方面,尤其是PHP的CMS,更是百花齊放,當然了,質(zhì)量也參差不齊。目前國外比較流行的有Dedecms和Phpcms,下面華來(lái)科技就這兩個(gè)cms做一下簡(jiǎn)單的對比。
首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。
PHP教程—DedeCMS二次開(kāi)發(fā)(二)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 428 次瀏覽 ? 2020-04-10 11:01
織夢(mèng)內容管理系統(DedeCMS),是一個(gè)集內容發(fā)布、編輯、管理檢索等于一體的網(wǎng)站管理系統(Web CMS),他擁有美國CMS諸多特性之外,還結合中國用戶(hù)的須要,對內容管理系統概念進(jìn)行明晰剖析和定位。
DedeCMS二次開(kāi)發(fā)
1、DedeCMS的二次開(kāi)發(fā)
為了使更多人了解二次開(kāi)發(fā),并更方便的了解DedeCMS的二次開(kāi)發(fā),下面將會(huì )簡(jiǎn)單的介紹關(guān)于DedeCMS二次開(kāi)發(fā)的一些基礎和大綱
2、DedeCMS二次開(kāi)發(fā)必備基礎:
· 非常熟悉HTML
· 熟悉p+CSS的布局
· 扎實(shí)的PHP基礎php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),熟悉結構化編程,了解OOP,并能看懂和使用
· 熟悉MYSQL,掌握SQL語(yǔ)言
3、DedeCMS二次開(kāi)發(fā)學(xué)習過(guò)程
· 理解CMS是哪些
· 熟悉DedeCMS的功能(如:欄目的分類(lèi),文檔管理,模型的使用,系統的設置等常用的功能)
· 掌握DedeCMS的模板標簽使用及原理
· DedeCMS目錄結構剖析 熟悉每位文件夾上面主要裝哪些文件,這樣在二次開(kāi)發(fā)的時(shí)侯曉得在那個(gè)文件夾下的哪些文件更改
目錄結構摘要:
./a 生成文件儲存路徑 .
/data 緩存文件及數據中心
/admin 管理后臺數據
/backupdata 備份數據
/cache 緩存文件
/enums 級別聯(lián)動(dòng)數據,JS,枚舉類(lèi)型的緩存文件
/js 常用的JS
/mark 水印相關(guān)文件
/module 模塊安裝文件
/rss Rss相關(guān)
/sessions Session 存放路徑
/textdata 文本數據
/tplcache 模板緩存
/uploadtmp 上傳文件緩存位置
/ziptmp zip包解壓緩存位置 ……
DedeCMS文件結構剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大約作用以后,可以便捷的對文件進(jìn)行更改
文件結構摘要:
common.inc.php 數據庫配置文件
config.cache.bak.php 后臺系統配置備份
config.cache.inc.php 后臺系統配置文件緩存
downmix.data.php 采集混淆緩存文件
mysql_error_track.inc MYSQL錯誤志
safequestions.php 安全問(wèn)題
sitemap.html 站點(diǎn)地圖
sys_pay.cache.php 支付網(wǎng)段配置
template.rand.php 隨機模板設置 ……
· DedeCMS數據庫結構剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解幾個(gè)核心表的設計及數組的含意,方便領(lǐng)到新的需求以后,能快速的判定是否加數組,還是新建表來(lái)處理。同時(shí)也能理解DedeCMS的數據庫設計思想,把有用的設計思路加到自己的系統中。
· DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登錄,注冊,文檔管理,權限控制,分類(lèi)管理,模型設置等一些常用流程控制。對幾個(gè)核心文件進(jìn)行解剖,了解其編程方法及安全機制
· DedeCMS插件的開(kāi)發(fā)(****式插件和內嵌式插件) 熟悉兩種插件的編撰,插件的導出導入php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),插件搭配模型的使用
作為國外第一個(gè)開(kāi)源的內容管理系統,DedeCMS在創(chuàng )建以來(lái)都在摸索中國互聯(lián)網(wǎng)內容管理系統的公路,并且推動(dòng)諸多開(kāi)源CMS前進(jìn)的公路,程序由當初個(gè)人作品,現已成立團隊,在提高用戶(hù)服務(wù)、提高產(chǎn)品質(zhì)量的同時(shí),對中國網(wǎng)站內容管理系統進(jìn)行研究,成為目前市場(chǎng)上最受歡迎的內容管理系統。 查看全部

織夢(mèng)內容管理系統(DedeCMS),是一個(gè)集內容發(fā)布、編輯、管理檢索等于一體的網(wǎng)站管理系統(Web CMS),他擁有美國CMS諸多特性之外,還結合中國用戶(hù)的須要,對內容管理系統概念進(jìn)行明晰剖析和定位。
DedeCMS二次開(kāi)發(fā)
1、DedeCMS的二次開(kāi)發(fā)
為了使更多人了解二次開(kāi)發(fā),并更方便的了解DedeCMS的二次開(kāi)發(fā),下面將會(huì )簡(jiǎn)單的介紹關(guān)于DedeCMS二次開(kāi)發(fā)的一些基礎和大綱
2、DedeCMS二次開(kāi)發(fā)必備基礎:
· 非常熟悉HTML
· 熟悉p+CSS的布局
· 扎實(shí)的PHP基礎php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),熟悉結構化編程,了解OOP,并能看懂和使用
· 熟悉MYSQL,掌握SQL語(yǔ)言
3、DedeCMS二次開(kāi)發(fā)學(xué)習過(guò)程
· 理解CMS是哪些
· 熟悉DedeCMS的功能(如:欄目的分類(lèi),文檔管理,模型的使用,系統的設置等常用的功能)
· 掌握DedeCMS的模板標簽使用及原理
· DedeCMS目錄結構剖析 熟悉每位文件夾上面主要裝哪些文件,這樣在二次開(kāi)發(fā)的時(shí)侯曉得在那個(gè)文件夾下的哪些文件更改
目錄結構摘要:
./a 生成文件儲存路徑 .
/data 緩存文件及數據中心
/admin 管理后臺數據
/backupdata 備份數據
/cache 緩存文件
/enums 級別聯(lián)動(dòng)數據,JS,枚舉類(lèi)型的緩存文件
/js 常用的JS
/mark 水印相關(guān)文件
/module 模塊安裝文件
/rss Rss相關(guān)
/sessions Session 存放路徑
/textdata 文本數據
/tplcache 模板緩存
/uploadtmp 上傳文件緩存位置
/ziptmp zip包解壓緩存位置 ……
DedeCMS文件結構剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大約作用以后,可以便捷的對文件進(jìn)行更改
文件結構摘要:
common.inc.php 數據庫配置文件
config.cache.bak.php 后臺系統配置備份
config.cache.inc.php 后臺系統配置文件緩存
downmix.data.php 采集混淆緩存文件
mysql_error_track.inc MYSQL錯誤志
safequestions.php 安全問(wèn)題
sitemap.html 站點(diǎn)地圖
sys_pay.cache.php 支付網(wǎng)段配置
template.rand.php 隨機模板設置 ……
· DedeCMS數據庫結構剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解幾個(gè)核心表的設計及數組的含意,方便領(lǐng)到新的需求以后,能快速的判定是否加數組,還是新建表來(lái)處理。同時(shí)也能理解DedeCMS的數據庫設計思想,把有用的設計思路加到自己的系統中。
· DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登錄,注冊,文檔管理,權限控制,分類(lèi)管理,模型設置等一些常用流程控制。對幾個(gè)核心文件進(jìn)行解剖,了解其編程方法及安全機制
· DedeCMS插件的開(kāi)發(fā)(****式插件和內嵌式插件) 熟悉兩種插件的編撰,插件的導出導入php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),插件搭配模型的使用
作為國外第一個(gè)開(kāi)源的內容管理系統,DedeCMS在創(chuàng )建以來(lái)都在摸索中國互聯(lián)網(wǎng)內容管理系統的公路,并且推動(dòng)諸多開(kāi)源CMS前進(jìn)的公路,程序由當初個(gè)人作品,現已成立團隊,在提高用戶(hù)服務(wù)、提高產(chǎn)品質(zhì)量的同時(shí),對中國網(wǎng)站內容管理系統進(jìn)行研究,成為目前市場(chǎng)上最受歡迎的內容管理系統。
php實(shí)現的采集小程序,做采集的必看
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 495 次瀏覽 ? 2020-07-25 08:02
以下是我收集的php實(shí)現的采集小程序,自己測試可用php 文章采集,做采集很實(shí)用哦!
<?php
//調用方法 :localhost/2.php?id=1 (自動(dòng)采集1-8的列表)
header("Content-type:text/html;charset=utf-8");
$con =mysql_connect("localhost", "root", "huweishen.com") or die("數據庫鏈接錯誤");
mysql_select_db("liuyan", $con);
mysql_query("set names 'utf8'");
function preg_substr($start, $end, $str) // 正則截取函數
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函數
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用實(shí)例 ----------------
if($_GET['id']<=8&&$_GET['id']){
$id=$_GET['id'];
$url = "http://www.037c.com/New/list_5_$id.html"; //目標站
$fp = fopen($url, "r") or die("超時(shí)");
$fcontents = file_get_contents($url);
$pattern="/<\/span><a href=\"(.*)\" title=\"(.*)\" target=\"_blank\">/iUs";//正則
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv('GB2312', 'UTF-8', addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv("GB2312","UTF-8", file_get_contents($url));
$author = preg_substr("/作者:/", "/<\//", $str); // 通過(guò)正則提取作者
$content = str_substr('<p class="wltg">', '</p>', $str); //通過(guò)字符串提取標題
$sql = "INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES ('$title', '$url' , '$content' , '$author')";
// echo $sql."<br/>";
mysql_query($sql);
}
$id++;
echo "正在采集URL數據列表$id...請稍后...";
echo "<script>window.location='2.php?id=$id'</script>";
}
else{
echo "采集數據結束。";
}
?>
其中 title 設置惟一php 文章采集,可以避免重復采集,很好的的一個(gè)php采集小程序,作者:風(fēng)云無(wú)忌 查看全部

以下是我收集的php實(shí)現的采集小程序,自己測試可用php 文章采集,做采集很實(shí)用哦!
<?php
//調用方法 :localhost/2.php?id=1 (自動(dòng)采集1-8的列表)
header("Content-type:text/html;charset=utf-8");
$con =mysql_connect("localhost", "root", "huweishen.com") or die("數據庫鏈接錯誤");
mysql_select_db("liuyan", $con);
mysql_query("set names 'utf8'");
function preg_substr($start, $end, $str) // 正則截取函數
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函數
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用實(shí)例 ----------------
if($_GET['id']<=8&&$_GET['id']){
$id=$_GET['id'];
$url = "http://www.037c.com/New/list_5_$id.html"; //目標站
$fp = fopen($url, "r") or die("超時(shí)");
$fcontents = file_get_contents($url);
$pattern="/<\/span><a href=\"(.*)\" title=\"(.*)\" target=\"_blank\">/iUs";//正則
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv('GB2312', 'UTF-8', addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv("GB2312","UTF-8", file_get_contents($url));
$author = preg_substr("/作者:/", "/<\//", $str); // 通過(guò)正則提取作者
$content = str_substr('<p class="wltg">', '</p>', $str); //通過(guò)字符串提取標題
$sql = "INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES ('$title', '$url' , '$content' , '$author')";
// echo $sql."<br/>";
mysql_query($sql);
}
$id++;
echo "正在采集URL數據列表$id...請稍后...";
echo "<script>window.location='2.php?id=$id'</script>";
}
else{
echo "采集數據結束。";
}
?>

其中 title 設置惟一php 文章采集,可以避免重復采集,很好的的一個(gè)php采集小程序,作者:風(fēng)云無(wú)忌
PHP寫(xiě)微信公眾號文章頁(yè)采集方法
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 458 次瀏覽 ? 2020-07-24 08:04
另外注意:這個(gè)匹配規則會(huì )可能在一段時(shí)間以后有變化。這篇文章會(huì )盡量保持更新。如果你按照我的文章制作了采集系統以后,當某三天失效了,別忘了回去再瞧瞧文章是否有更新。
2)內容處理:
通過(guò)前面的方式我們獲得了文章內容的html,但是你將文章內容顯示下來(lái)以后才會(huì )發(fā)覺(jué),圖片和視頻不能正常顯示。因為這個(gè)html還須要一些加工:
首先是圖片,微信文章中的標簽中的src屬性全部都用了data-src屬性替代。只有在顯示的時(shí)侯就會(huì )被替換過(guò)來(lái)。所以我們也有兩個(gè)方案,將源代碼直接替換過(guò)來(lái),或者用js在顯示時(shí)侯再替換。下面我先介紹直接替換html的方式:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("data-src","src",$content);
然后是視頻,視頻的顯示不正常,經(jīng)過(guò)常年測試后發(fā)覺(jué)只要替換一個(gè)頁(yè)面地址才能解決,過(guò)程就不說(shuō)了,直接說(shuō)結果:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("preview.html","player.html",$content);
通過(guò)這兩個(gè)替換過(guò)后,文章內容html中的圖片和視頻就都正常了。
3) 公眾號相關(guān)信息:
通過(guò)本專(zhuān)欄之前的文章,介紹了我們使用陌陌客戶(hù)端,任意打開(kāi)一個(gè)公眾號的歷史消息頁(yè)以后。系統從數據庫中辨識biz的值,發(fā)現數據庫中沒(méi)有記錄,就會(huì )插入一條新的紀錄。之后的采集隊列都會(huì )定期按照這個(gè)biz來(lái)獲取這個(gè)公眾號的歷史消息列表。
但是我們只獲得了這個(gè)公眾號的biz,公眾號的名稱(chēng),頭像這兩個(gè)重要信息還是沒(méi)有獲取到。主要誘因是歷史消息頁(yè)面中沒(méi)有這兩個(gè)信息。但是我們可以從文章頁(yè)面中獲取到。
在陌陌文章頁(yè)面html的頂部,有一些js的變量形參的代碼,通過(guò)正則匹配然后我們就可以獲得這兩個(gè)公眾號的信息:
1
2
3
4
5
6
7
//$html變量的值是上面獲取到的文章全部html
preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
$nickname = $m[1][0];//公眾號愛(ài)稱(chēng)
preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
$head_img = $m[1][0];//公眾號頭像
通過(guò)這兩個(gè)正則匹配,我們才能獲取到公眾號的頭像和愛(ài)稱(chēng),然后按照文章地址中的biz,可以保存到對應的微信號數據表中。
3、文章的保存和處理
前面的代碼已然將文章內容獲取到變量中了。如何保存雖然每個(gè)人似乎都有自己的看法。我這兒介紹一下我的保存內容的方式:
將文章內容的html以數據庫id為文件名保存成html文件,以biz數組為目錄。
1
2
3
4
5
6
7
8
9
10
11
$dir = "./".$biz."/";
$filename = $dir.$id.".html";
if(!is_dir($dir)) {
mkdir($cache_dir);
chmod($cache_dir,0777);
}
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
以上代碼是一個(gè)標準的php構建文件夾保存文件的代碼,大家可以依照自己的實(shí)際情況安排保存方式。
在這以后我們就可以在自己的服務(wù)器上得到一個(gè)html文件,內容就是公眾號的文章內容。我們可以從瀏覽器中打開(kāi)看一下。這時(shí)你或許會(huì )發(fā)覺(jué)圖片防盜鏈了!無(wú)法正常顯示!包括數據庫中保存的文章封面圖,公眾號的頭像都是防盜鏈的。
別急,這個(gè)問(wèn)題挺好解決,只須要將圖片也保存到自己的服務(wù)器,無(wú)非是將來(lái)會(huì )占用自己的服務(wù)器空間和帶寬。
圖片防盜鏈的原理是當圖片在網(wǎng)頁(yè)中顯示的時(shí)侯php 采集微信文章圖片,圖片服務(wù)器會(huì )測量到引用這張圖片的服務(wù)器域名,當發(fā)覺(jué)服務(wù)器域名不包含或的時(shí)侯才會(huì )被替換成防盜鏈圖片。
但是假若測量不到引用頁(yè)面的域名才會(huì )正常顯示,所以我們通過(guò)php的函數file_get_content()就可以將圖片的二進(jìn)制代碼獲取過(guò)來(lái),然后按照自己的看法起個(gè)文件名保存到自己的服務(wù)器上。在這里再介紹一個(gè)保存圖片的方式,我目前使用了騰訊云的“萬(wàn)象優(yōu)圖”,通過(guò)它們提供的api將圖片保存到云空間,這樣的用處是讀取圖片時(shí)直接在圖片的鏈接地址加上希望得到的圖片規格大小參數,就可以直接得到一張縮略圖。比存在自己的服務(wù)器便捷得多。阿里云也應當有同樣的產(chǎn)品php 采集微信文章圖片,好像名叫對象儲存。
另外,我采集公眾號內容的目的是制做成一個(gè)新聞app,在app上將html代碼顯示下來(lái)以后,因為app同樣沒(méi)有域名,防盜鏈服務(wù)器也同樣不會(huì )覺(jué)得圖片被盜鏈了。這樣就可以直接顯示圖片下來(lái)。 查看全部
另外注意:這個(gè)匹配規則會(huì )可能在一段時(shí)間以后有變化。這篇文章會(huì )盡量保持更新。如果你按照我的文章制作了采集系統以后,當某三天失效了,別忘了回去再瞧瞧文章是否有更新。
2)內容處理:
通過(guò)前面的方式我們獲得了文章內容的html,但是你將文章內容顯示下來(lái)以后才會(huì )發(fā)覺(jué),圖片和視頻不能正常顯示。因為這個(gè)html還須要一些加工:
首先是圖片,微信文章中的標簽中的src屬性全部都用了data-src屬性替代。只有在顯示的時(shí)侯就會(huì )被替換過(guò)來(lái)。所以我們也有兩個(gè)方案,將源代碼直接替換過(guò)來(lái),或者用js在顯示時(shí)侯再替換。下面我先介紹直接替換html的方式:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("data-src","src",$content);
然后是視頻,視頻的顯示不正常,經(jīng)過(guò)常年測試后發(fā)覺(jué)只要替換一個(gè)頁(yè)面地址才能解決,過(guò)程就不說(shuō)了,直接說(shuō)結果:
1
2
3
4
//$content變量的值是上面獲取到的文章內容html
$content = str_replace("preview.html","player.html",$content);
通過(guò)這兩個(gè)替換過(guò)后,文章內容html中的圖片和視頻就都正常了。
3) 公眾號相關(guān)信息:
通過(guò)本專(zhuān)欄之前的文章,介紹了我們使用陌陌客戶(hù)端,任意打開(kāi)一個(gè)公眾號的歷史消息頁(yè)以后。系統從數據庫中辨識biz的值,發(fā)現數據庫中沒(méi)有記錄,就會(huì )插入一條新的紀錄。之后的采集隊列都會(huì )定期按照這個(gè)biz來(lái)獲取這個(gè)公眾號的歷史消息列表。
但是我們只獲得了這個(gè)公眾號的biz,公眾號的名稱(chēng),頭像這兩個(gè)重要信息還是沒(méi)有獲取到。主要誘因是歷史消息頁(yè)面中沒(méi)有這兩個(gè)信息。但是我們可以從文章頁(yè)面中獲取到。
在陌陌文章頁(yè)面html的頂部,有一些js的變量形參的代碼,通過(guò)正則匹配然后我們就可以獲得這兩個(gè)公眾號的信息:
1
2
3
4
5
6
7
//$html變量的值是上面獲取到的文章全部html
preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
$nickname = $m[1][0];//公眾號愛(ài)稱(chēng)
preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
$head_img = $m[1][0];//公眾號頭像
通過(guò)這兩個(gè)正則匹配,我們才能獲取到公眾號的頭像和愛(ài)稱(chēng),然后按照文章地址中的biz,可以保存到對應的微信號數據表中。
3、文章的保存和處理
前面的代碼已然將文章內容獲取到變量中了。如何保存雖然每個(gè)人似乎都有自己的看法。我這兒介紹一下我的保存內容的方式:
將文章內容的html以數據庫id為文件名保存成html文件,以biz數組為目錄。
1
2
3
4
5
6
7
8
9
10
11
$dir = "./".$biz."/";
$filename = $dir.$id.".html";
if(!is_dir($dir)) {
mkdir($cache_dir);
chmod($cache_dir,0777);
}
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
以上代碼是一個(gè)標準的php構建文件夾保存文件的代碼,大家可以依照自己的實(shí)際情況安排保存方式。
在這以后我們就可以在自己的服務(wù)器上得到一個(gè)html文件,內容就是公眾號的文章內容。我們可以從瀏覽器中打開(kāi)看一下。這時(shí)你或許會(huì )發(fā)覺(jué)圖片防盜鏈了!無(wú)法正常顯示!包括數據庫中保存的文章封面圖,公眾號的頭像都是防盜鏈的。
別急,這個(gè)問(wèn)題挺好解決,只須要將圖片也保存到自己的服務(wù)器,無(wú)非是將來(lái)會(huì )占用自己的服務(wù)器空間和帶寬。
圖片防盜鏈的原理是當圖片在網(wǎng)頁(yè)中顯示的時(shí)侯php 采集微信文章圖片,圖片服務(wù)器會(huì )測量到引用這張圖片的服務(wù)器域名,當發(fā)覺(jué)服務(wù)器域名不包含或的時(shí)侯才會(huì )被替換成防盜鏈圖片。
但是假若測量不到引用頁(yè)面的域名才會(huì )正常顯示,所以我們通過(guò)php的函數file_get_content()就可以將圖片的二進(jìn)制代碼獲取過(guò)來(lái),然后按照自己的看法起個(gè)文件名保存到自己的服務(wù)器上。在這里再介紹一個(gè)保存圖片的方式,我目前使用了騰訊云的“萬(wàn)象優(yōu)圖”,通過(guò)它們提供的api將圖片保存到云空間,這樣的用處是讀取圖片時(shí)直接在圖片的鏈接地址加上希望得到的圖片規格大小參數,就可以直接得到一張縮略圖。比存在自己的服務(wù)器便捷得多。阿里云也應當有同樣的產(chǎn)品php 采集微信文章圖片,好像名叫對象儲存。
另外,我采集公眾號內容的目的是制做成一個(gè)新聞app,在app上將html代碼顯示下來(lái)以后,因為app同樣沒(méi)有域名,防盜鏈服務(wù)器也同樣不會(huì )覺(jué)得圖片被盜鏈了。這樣就可以直接顯示圖片下來(lái)。
wordpress安裝過(guò)程中遇見(jiàn)英文亂碼的處理方式
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 598 次瀏覽 ? 2020-06-17 08:01
WordPress建站 新手入門(mén),wordpress建站W(wǎng)ordPress建站 新手入門(mén)教程系列 1. WordPress入門(mén) 之 什么是WordPress? 2. WordPress入門(mén) 之 搭建WordPress站點(diǎn)須要哪些條件? 3. WordPress入門(mén) 之 如何安裝WordPre
總結關(guān)于WordPress注意點(diǎn)
...務(wù)器端的路由功能應當都比較熟悉,國外流行的博客系統wordpress也是十分精典的路由實(shí)現案例。那么,究竟哪些的路由呢,下面通過(guò)wordpress來(lái)簡(jiǎn)單講一下。理解wordpress重畫(huà)規則的的都是曉得,實(shí)際上任何一條url的訪(fǎng)問(wèn)都是基于wor...
最流行的php建站程序是哪些?
要說(shuō)最流行的php建站程序是哪些?那肯定非wordpress莫屬了。WordPress擁有全球逾三分之一的網(wǎng)站,從大型個(gè)人博客到索尼、時(shí)代公司、紐約郵報和NBC等大公司的復雜網(wǎng)站。WordPress只是網(wǎng)站構建器和內容管理系統之一,...
wordpress須要會(huì )php嗎
WordPress是使用PHP語(yǔ)言開(kāi)發(fā)的博客平臺,用戶(hù)可以在支持PHP和MySQL數據庫的服務(wù)器上架設屬于自己的網(wǎng)站。也可以把 WordPress當成一個(gè)內容管理系統(CMS)來(lái)使用。WordPress是一款個(gè)人博客系統,并逐漸演變成一款內容...
開(kāi)源,棄 PHP 改用 JavaScript_PHP教程
開(kāi)源,棄 PHP 改用 在明天邁出了自創(chuàng )立以來(lái)的最跨越性的一步。Automattic 公司從頭重畫(huà)了 ,將這項計劃命名為 Calypso譯者注:卡呂普索安裝wordpress主題后 顯示亂碼 怎么解決,希臘神話(huà)的海之女神),從內...
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,_PHP教程
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,不知算不算手賤,把VPS服務(wù)器上的php升級到7.0, 雖然7.x與之前的兼容性是很高的,但移除了一大堆過(guò)時(shí)用法,而個(gè)別老應用一直在使用。對個(gè)人wordpress站點(diǎn)里出現...
在Linux系統下一鍵重新安裝WordPress的腳本示例_PHP
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下安裝wordpress主題后 顯示亂碼 怎么解決,完全重新安...
在Linux系統下一鍵重新安裝WordPress的腳本示例_php方法
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下,完全重新安...
wordpress主題制做結構文件,wordpress主題結構_PHP教程
wordpress主題制做結構文件,wordpress主題結構 下面是WordPress主題文件層次結構,它會(huì )告訴你:當WordPress顯示特定的頁(yè)面類(lèi)型時(shí),會(huì )使用那個(gè)模板文件呢?只有了解了以下主題層次結構,你就能曉得你的WordPress主... 查看全部
WordPress建站 新手入門(mén),wordpress建站W(wǎng)ordPress建站 新手入門(mén)教程系列 1. WordPress入門(mén) 之 什么是WordPress? 2. WordPress入門(mén) 之 搭建WordPress站點(diǎn)須要哪些條件? 3. WordPress入門(mén) 之 如何安裝WordPre
總結關(guān)于WordPress注意點(diǎn)
...務(wù)器端的路由功能應當都比較熟悉,國外流行的博客系統wordpress也是十分精典的路由實(shí)現案例。那么,究竟哪些的路由呢,下面通過(guò)wordpress來(lái)簡(jiǎn)單講一下。理解wordpress重畫(huà)規則的的都是曉得,實(shí)際上任何一條url的訪(fǎng)問(wèn)都是基于wor...
最流行的php建站程序是哪些?
要說(shuō)最流行的php建站程序是哪些?那肯定非wordpress莫屬了。WordPress擁有全球逾三分之一的網(wǎng)站,從大型個(gè)人博客到索尼、時(shí)代公司、紐約郵報和NBC等大公司的復雜網(wǎng)站。WordPress只是網(wǎng)站構建器和內容管理系統之一,...
wordpress須要會(huì )php嗎
WordPress是使用PHP語(yǔ)言開(kāi)發(fā)的博客平臺,用戶(hù)可以在支持PHP和MySQL數據庫的服務(wù)器上架設屬于自己的網(wǎng)站。也可以把 WordPress當成一個(gè)內容管理系統(CMS)來(lái)使用。WordPress是一款個(gè)人博客系統,并逐漸演變成一款內容...
開(kāi)源,棄 PHP 改用 JavaScript_PHP教程
開(kāi)源,棄 PHP 改用 在明天邁出了自創(chuàng )立以來(lái)的最跨越性的一步。Automattic 公司從頭重畫(huà)了 ,將這項計劃命名為 Calypso譯者注:卡呂普索安裝wordpress主題后 顯示亂碼 怎么解決,希臘神話(huà)的海之女神),從內...
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,_PHP教程
PHP版本升級到7.x后wordpress的一些更改及wordpress方法,不知算不算手賤,把VPS服務(wù)器上的php升級到7.0, 雖然7.x與之前的兼容性是很高的,但移除了一大堆過(guò)時(shí)用法,而個(gè)別老應用一直在使用。對個(gè)人wordpress站點(diǎn)里出現...
在Linux系統下一鍵重新安裝WordPress的腳本示例_PHP
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下安裝wordpress主題后 顯示亂碼 怎么解決,完全重新安...
在Linux系統下一鍵重新安裝WordPress的腳本示例_php方法
...或者誤操作,數據庫沒(méi)了,所以,我為了市時(shí)間,寫(xiě)了個(gè)wordpress一鍵重新安裝的腳本。我這只是寫(xiě)個(gè)大約的。大家可以依照自己的須要更改腳本。使用條件:我這個(gè)腳本主要用在網(wǎng)站遷移的情況下,完全重新安...
wordpress主題制做結構文件,wordpress主題結構_PHP教程
wordpress主題制做結構文件,wordpress主題結構 下面是WordPress主題文件層次結構,它會(huì )告訴你:當WordPress顯示特定的頁(yè)面類(lèi)型時(shí),會(huì )使用那個(gè)模板文件呢?只有了解了以下主題層次結構,你就能曉得你的WordPress主...
PHP爬蟲(chóng)編撰
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 418 次瀏覽 ? 2020-06-04 08:04
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特性,利于學(xué)習,使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP 獨特的句型混和了C、Java、Perl以及PHP自創(chuàng )的句型。它可以比CGI或則Perl更快速地執行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP作出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML(標準通用標記語(yǔ)言下的一個(gè)應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優(yōu)化代碼運行php網(wǎng)絡(luò )爬蟲(chóng)軟件,使代碼運行更快?!俣劝倏频拿枋?。
二、爬蟲(chóng)有哪些用?
爬蟲(chóng)有哪些用?先說(shuō)一下爬蟲(chóng)是哪些東西,我覺(jué)得爬蟲(chóng)就是一個(gè)網(wǎng)路信息搜集程序,也許我自己的理解有錯誤,也請你們給我見(jiàn)諒。既然爬蟲(chóng)是一個(gè)網(wǎng)路信息搜集程序,那就是拿來(lái)搜集信息,并且搜集的信息是在網(wǎng)路里面的。如果還是不太清楚爬蟲(chóng)有什么用php網(wǎng)絡(luò )爬蟲(chóng)軟件,我就舉幾個(gè)爬蟲(chóng)應用的事例:搜索引擎就須要爬蟲(chóng)搜集網(wǎng)路信息供人們去搜索;大數據的數據,數據從那里來(lái)?就是可以通過(guò)爬蟲(chóng)在網(wǎng)路中爬?。ㄊ占┒鴣?lái)。
三、通??吹脚老x(chóng)會(huì )想到 Python,但為何我用 PHP,而不用 Python 呢?
Python 我說(shuō)實(shí)話(huà),我不會(huì ) Python。( Python 我真不會(huì ),想知道可能你要去百度一下,因為 Python 我真不會(huì )。)PHP 寫(xiě)東西我仍然都是覺(jué)得,你只要想出算法程序就早已下來(lái)了,不用考慮太多數據類(lèi)型的問(wèn)題。PHP 的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。PHP的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。的看法有錯。)本人雖然也是初學(xué) PHP,想通過(guò)寫(xiě)一些東西提升自己的水平。(下面可能有些代碼會(huì )使你認為不夠規范,歡迎見(jiàn)諒,謝謝。)
四、PHP爬蟲(chóng)第一步
PHP爬蟲(chóng)第一步,第一步......第一步其實(shí)就是搭建 PHP 的運行環(huán)境,沒(méi)有環(huán)境PHP又如何能運行呢?就像蝦不能離開(kāi)水一樣。(我見(jiàn)識還不夠,可能我舉的蝦的事例不夠好,請見(jiàn)諒。)在Windows的系統下我使用 WAMP,而在Linux的系統下我使用 LNMP 或者 LAMP。
WAMP:Windows + Apache + Mysql + PHP
LAMP:Linux + Apache + Mysql + PHP
LNMP:Linux + Nginx + Mysql + PHP
Apache 和 Nginx 是 Web 服務(wù)器軟件。
Apache或Nginx、Mysql 以及 PHP 這些都是 PHP Web 的基本配置環(huán)境。網(wǎng)上有 PHP Web 環(huán)境的安裝包,這些安裝包使用很方便,不需要每給東西安裝以及配置。但若果你對這種集成安裝包害怕安全問(wèn)題,你可以到這種程序的官網(wǎng)下載之后在網(wǎng)上找配置教程就可以了。(說(shuō)真的,我真心的不會(huì )單獨去弄,我認為很麻煩。)
五、 PHP爬蟲(chóng)第二步
(感覺(jué)自己屁話(huà)很多,應該馬上來(lái)一段代碼?。?!)
<?php
// 爬蟲(chóng)核心功能:獲取網(wǎng)頁(yè)源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) php 的 file_get_contents 函數獲取百度首頁(yè)源碼,并傳給 $html 變量
echo $html;
// 輸出 $html
?>
爬蟲(chóng)網(wǎng)路核心功能早已寫(xiě)下來(lái)了,為什么說(shuō)就如此幾行代碼就把爬蟲(chóng)核心功能寫(xiě)下來(lái)了呢?我猜有人早已明白了吧,其實(shí)是因為爬蟲(chóng)是數據獲取的程序,就里面幾行代碼雖然早已才能獲取數據了,所以爬蟲(chóng)的核心功能早已寫(xiě)下來(lái)了??赡苡腥藭?huì )說(shuō)“你這個(gè)也很菜了吧!有哪些用?”,雖然我是太菜,但請別說(shuō)出來(lái),讓我好好裝個(gè)X。(又說(shuō)了兩行屁話(huà),不好意思。)
其實(shí)爬蟲(chóng)是拿來(lái)干嘛,主要看你想使它來(lái)干嘛。就像我前些日子為了好玩寫(xiě)了一個(gè)搜索引擎網(wǎng)站出來(lái),當然網(wǎng)站很菜,結果排序沒(méi)有規律,很多都查不到。我的搜索引擎的爬蟲(chóng)就是要寫(xiě)一個(gè)適合于搜索引擎的爬蟲(chóng)。所以為了便捷我也就用寫(xiě)搜索引擎的爬蟲(chóng)為目標講解。當然了,我搜索引擎的爬蟲(chóng)還是不夠建立,不健全的地方都是要大家自己去創(chuàng )造,去建立。
六、 搜索引擎爬蟲(chóng)的限制
搜索引擎的爬蟲(chóng)有時(shí)候不是不能那種網(wǎng)站的頁(yè)面獲取頁(yè)面源碼,而是有robot.txt文件,有該文件的網(wǎng)站,就代表站主不希望爬蟲(chóng)去爬取頁(yè)面源碼。(不過(guò)若果你就是想要獲取的話(huà),就算有也一樣會(huì )去爬吧?。?br /> 我搜索引擎的爬蟲(chóng)雖然還有好多不足而造成的限制,例如可能由于未能運行 JS 腳本所以未能獲取頁(yè)面源碼。又或則網(wǎng)站有反爬蟲(chóng)的機制引起不能獲取到頁(yè)面源碼。有反爬蟲(chóng)機制的網(wǎng)站就如:知乎,知乎就是有反爬蟲(chóng)的機制的網(wǎng)站。
七、以弄搜索引擎爬蟲(chóng)為例,準備寫(xiě)該爬蟲(chóng)須要的東西
PHP 編寫(xiě)基礎正則表達式(你也可以使用Xpath,對不起,我不會(huì )使用)數據庫的使用(本文使用 MySql 數據庫)運行環(huán)境(只要有能運行 PHP 網(wǎng)站的環(huán)境和數據庫就OK)
八、搜索引擎獲取頁(yè)面源碼并獲取頁(yè)面的標題信息
<?PHP
// 通過(guò) file_get_contents 函數獲取百度頁(yè)面源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) preg_replace 函數使頁(yè)面源碼由多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 通過(guò) preg_match 函數提取獲取頁(yè)面的標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOne,$titleArr);
// 由于 preg_match 函數的結果是數組的形式
$title = $titleArr[1];
// 通過(guò) echo 函數輸出標題信息
echo $title;
?>
報錯誤示例:
Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
https是SSL加密合同,如果出現獲取頁(yè)面晨報里面的錯誤,代表你的 PHP 可能少了OpenSSL 的模塊,你可以到網(wǎng)上查找解決辦法。
九、搜索引擎爬蟲(chóng)的特征
雖然我沒(méi)見(jiàn)過(guò)象“百度”,“Google”它們的爬蟲(chóng),可是我自己通過(guò)推測,以及在實(shí)際爬去過(guò)程當中遇見(jiàn)的一些問(wèn)題,自己總結的幾個(gè)特性。(可能有不對的地方,或者缺乏的地方,歡迎見(jiàn)諒,謝謝。)
通用性
通用性是因為我覺(jué)得搜索引擎的爬蟲(chóng)一開(kāi)始并不是針對哪一個(gè)網(wǎng)站制定的,所以要求能爬取到的網(wǎng)站盡可能的多,這是第一點(diǎn)。而第二點(diǎn),就是獲取網(wǎng)頁(yè)的信息就是這些,一開(kāi)始不會(huì )由于個(gè)別某些特殊小網(wǎng)站而舍棄個(gè)別信息不提取,舉個(gè)反例:一個(gè)小網(wǎng)站的一個(gè)網(wǎng)頁(yè)meta標簽里沒(méi)有描述信息(description)或者關(guān)鍵詞信息(keyword),就直接舍棄了描述信息或則關(guān)鍵詞信息的提取,當然假如真的某一個(gè)頁(yè)面沒(méi)有這種信息我會(huì )提取頁(yè)面里的文字內容作為填充,反正就是盡可能達到爬取的網(wǎng)頁(yè)信息每位網(wǎng)頁(yè)的信息項都要一樣。這是我覺(jué)得的搜索引擎爬蟲(chóng)的通用性,當然我的看法可能是錯誤的。(我說(shuō)得可能不是很好,我仍然在學(xué)習。)
不確定性
不確定性就是我的爬蟲(chóng)獲取哪些網(wǎng)頁(yè)我是控制不夠全面的,只能控制我能想到的情況,這也是由于我寫(xiě)的算法就是這樣的緣由,我的算法就是爬取獲取到的頁(yè)面里的所有鏈接,再去爬去獲取到的那些鏈接,其實(shí)是因為搜索引擎并不是搜某一些東西,而是盡可能的多,因為只有更多的信息,才能找到一個(gè)最貼切用戶(hù)想要的答案。所以我就認為搜索引擎的爬蟲(chóng)就要有不確定性。(我自己再看了一遍,也有點(diǎn)認為自己說(shuō)得有點(diǎn)使自己看不懂,請見(jiàn)諒,歡迎見(jiàn)諒,提問(wèn),謝謝了?。?br /> 下面的視頻是我的搜索網(wǎng)站的使用視頻,而搜到的信息就是通過(guò)自己寫(xiě)的 PHP 爬蟲(chóng)獲取到的。(這個(gè)網(wǎng)站我早已不再繼續維護了,所以有缺乏之處,請見(jiàn)諒。)
十、到如今可能出現的問(wèn)題
獲取的源碼出現亂碼
<?PHP
// 亂碼解決辦法,把其他編碼格式通過(guò) mb_convert_encoding 函數統一轉為 UTF-8 格式
$html = mb_convert_encoding($html,'UTF-8','UTF-8,GBK,GB2312,BIG5');
// 還有一種因為gzip所以出現亂碼的,我會(huì )在以后講
?>
2. 獲取不到標題信息
<?PHP
// 獲取不到標題信息解決辦法,首先判斷是否能獲取到頁(yè)面源碼
// 如果能獲取到但還是不能獲取到標題信息
// 我猜測的問(wèn)題是:因為我教的是使用正則表達式獲取的,源碼沒(méi)有變成一行,獲取起來(lái)就會(huì )出現問(wèn)題
$htmlOneLine=preg_replace("/\r|\n|\t/","",$html);
?>
3.獲取不到頁(yè)面源碼
<?PHP
// 像新浪微博你可能獲取到的是“Sina Visitor System”
// 解決辦法添加header信息
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n",
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 這樣就能獲取到新浪微博的頁(yè)面了
?>
十一、獲取一個(gè)網(wǎng)頁(yè)時(shí)的處理思路
我們先不去想好多網(wǎng)頁(yè),因為好多網(wǎng)頁(yè)也就是一個(gè)循環(huán)。
獲取頁(yè)面源碼通過(guò)源碼提取頁(yè)面的哪些信息提取的信息要如何處理處理后放不放進(jìn)數據庫
十二、按照十一的思路的代碼
<?php
// 一、獲取源碼
// 假設我們要獲取淘寶首頁(yè)
$html = file_get_content("https://www.taobao.com");
// 二、提取標題和文本
// 三、提取信息處理
// 處理頁(yè)面源碼,多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 獲取標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOneLine,$titleArr);
// 保留標題信息
$titleOK = $titleArr[1];
// 獲取頁(yè)面中的文本信息
// 處理前面不需要的head標簽
$htmlText = preg_replace("/<html>(.*)<\/head>/","",$htmlOneLine);
// 處理style和script標簽及內容
$htmlText = preg_replace("/<style(.*)>(.*)</style>|<script(.*)>(.*)</script>/iU","",$htmlText);
// 處理多余標簽
$htmlText = preg_replace("/<(\/)?(.+)>/","",$htmlText);
// 四、保存到數據庫
// 略
?>
十三、PHP 保存頁(yè)面的圖片思路
獲取頁(yè)面源碼獲取頁(yè)面的圖片鏈接使用函數保存圖片
十四、保存圖片示例代碼
<?php
// 使用file_get_contents()函數獲取圖片
$img = file_get_contents("http://127.0.0.1/photo.jpg");
// 使用file_put_contents()函數保存圖片
file_put_contents("photo.jpg",$img);
?>
十五、gzip解壓
本來(lái)我以為自己寫(xiě)的爬蟲(chóng)早已寫(xiě)得差不多了,就是不僅反爬蟲(chóng)的網(wǎng)站難以爬取外,應該是都可以爬了。但有三天我去嘗試爬去bilibili的時(shí)侯出現問(wèn)題了,我發(fā)覺(jué)如何我數據庫上面的都是亂碼,而且標題哪些的都沒(méi)有,好奇怪!后來(lái)我才曉得原先是因為GZIP的壓縮,原來(lái)我直接使用file_get_content函數獲取的頁(yè)面是未經(jīng)過(guò)解壓的頁(yè)面,所有都是亂碼!好了,然后我曉得問(wèn)題出現在哪里了,接下來(lái)就是想解決辦法了。(其實(shí)那時(shí)候的我是完全不知道如何解決解壓gzip的,都靠搜索引擎,哈哈哈哈哈)。
我得到了兩個(gè)解決辦法:
在 request header 那里告訴對方服務(wù)器,我這爬蟲(chóng)(不。。。應該是我這瀏覽器)不支持gzip的解壓,就麻煩你不要壓縮,直接把數據發(fā)給我吧!
// 這是request header(請求頭)
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n".
"accept-encoding:"
)
);
// 我把accept-encodeing(能接收編碼)設為空,代表不接受gzip
2. 如果告訴了對方服務(wù)器本瀏覽器(爬蟲(chóng))不支持解壓gzip,可他還是繼續發(fā)gzip的數據給你,那就沒(méi)有辦法了,只好默默的在搜索引擎找php解壓gzip的解壓函數——gzdecode()。
// 廢話(huà):好久沒(méi)更新了,因為近來(lái)又在重復造輪子,不過(guò)好開(kāi)心-- 2019.01.14
十六、子鏈接的獲取
網(wǎng)頁(yè)爬蟲(chóng)就好比手動(dòng)的網(wǎng)頁(yè)源碼另存為操作,可是假如真的是一個(gè)一個(gè)網(wǎng)址自動(dòng)輸入給爬蟲(chóng)去爬取的話(huà),那還倒不如人手另存為呢!所以在這里就得解析到這些子鏈接,一個(gè)網(wǎng)頁(yè)似乎會(huì )有好多的a標簽,而這種a標簽的href屬性值都會(huì )是一個(gè)子鏈接。(這句如何覺(jué)得有一點(diǎn)屁話(huà)呢?應該你們都曉得吧!)通過(guò)好多種工具的解析得到了原始的子鏈接(我沒(méi)用html的工具,就是用了正則表達式及工具)為什么叫原始數據,因為這些子鏈接有很多不是URL鏈接,又或則是一些不完整的鏈接,又或則你是要爬一個(gè)網(wǎng)站,不要爬蟲(chóng)跑出去的時(shí)侯,還得消除一些并非那種網(wǎng)站的鏈接,防止爬蟲(chóng)跑出去。下面我列出一些原始子鏈接。(其實(shí)就是我噴到的坑。。。)
http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
你可以看得到這兒有很多種鏈接,有完整的絕對路徑的鏈接,也有不完整的相對路徑鏈接,有的還跑來(lái)了javascript,如果是相對路徑或javascript的鏈接,直接給爬蟲(chóng)去爬,肯定使爬蟲(chóng)一臉懵,因為不完整或根本就不是一個(gè)鏈接。所以就須要對子鏈接補全或則扔掉。
十七、子鏈接的處理
上面屁話(huà)了一大堆后,接下來(lái)還是繼續屁話(huà)。好了,處理雖然就是去重、丟棄以及補全。
對于相同的子鏈接遺棄不保存對于相對路徑鏈接補全對于不是鏈接的鏈接遺棄(不是鏈接的鏈接是哪些東西?自己都認為的奇怪。。。。)
對于第一種我就不多說(shuō)了,相信你們都曉得該如何做。
對付第二種的方式我就寫(xiě)一個(gè)才能運行相對路徑的方式下來(lái)就OK了,通過(guò)父鏈接來(lái)進(jìn)行相對路徑轉絕對路徑。(有空補代碼給你們。。。不好意思了)
對于第三種也正則匹配一下就完了。 查看全部
一、PHP 是哪些東西?
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特性,利于學(xué)習,使用廣泛,主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP 獨特的句型混和了C、Java、Perl以及PHP自創(chuàng )的句型。它可以比CGI或則Perl更快速地執行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP作出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML(標準通用標記語(yǔ)言下的一個(gè)應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優(yōu)化代碼運行php網(wǎng)絡(luò )爬蟲(chóng)軟件,使代碼運行更快?!俣劝倏频拿枋?。
二、爬蟲(chóng)有哪些用?
爬蟲(chóng)有哪些用?先說(shuō)一下爬蟲(chóng)是哪些東西,我覺(jué)得爬蟲(chóng)就是一個(gè)網(wǎng)路信息搜集程序,也許我自己的理解有錯誤,也請你們給我見(jiàn)諒。既然爬蟲(chóng)是一個(gè)網(wǎng)路信息搜集程序,那就是拿來(lái)搜集信息,并且搜集的信息是在網(wǎng)路里面的。如果還是不太清楚爬蟲(chóng)有什么用php網(wǎng)絡(luò )爬蟲(chóng)軟件,我就舉幾個(gè)爬蟲(chóng)應用的事例:搜索引擎就須要爬蟲(chóng)搜集網(wǎng)路信息供人們去搜索;大數據的數據,數據從那里來(lái)?就是可以通過(guò)爬蟲(chóng)在網(wǎng)路中爬?。ㄊ占┒鴣?lái)。
三、通??吹脚老x(chóng)會(huì )想到 Python,但為何我用 PHP,而不用 Python 呢?
Python 我說(shuō)實(shí)話(huà),我不會(huì ) Python。( Python 我真不會(huì ),想知道可能你要去百度一下,因為 Python 我真不會(huì )。)PHP 寫(xiě)東西我仍然都是覺(jué)得,你只要想出算法程序就早已下來(lái)了,不用考慮太多數據類(lèi)型的問(wèn)題。PHP 的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。PHP的句型和其他編程語(yǔ)言差不多,就算你開(kāi)始不會(huì ) PHP,你也可以馬上上手。的看法有錯。)本人雖然也是初學(xué) PHP,想通過(guò)寫(xiě)一些東西提升自己的水平。(下面可能有些代碼會(huì )使你認為不夠規范,歡迎見(jiàn)諒,謝謝。)
四、PHP爬蟲(chóng)第一步
PHP爬蟲(chóng)第一步,第一步......第一步其實(shí)就是搭建 PHP 的運行環(huán)境,沒(méi)有環(huán)境PHP又如何能運行呢?就像蝦不能離開(kāi)水一樣。(我見(jiàn)識還不夠,可能我舉的蝦的事例不夠好,請見(jiàn)諒。)在Windows的系統下我使用 WAMP,而在Linux的系統下我使用 LNMP 或者 LAMP。
WAMP:Windows + Apache + Mysql + PHP
LAMP:Linux + Apache + Mysql + PHP
LNMP:Linux + Nginx + Mysql + PHP
Apache 和 Nginx 是 Web 服務(wù)器軟件。
Apache或Nginx、Mysql 以及 PHP 這些都是 PHP Web 的基本配置環(huán)境。網(wǎng)上有 PHP Web 環(huán)境的安裝包,這些安裝包使用很方便,不需要每給東西安裝以及配置。但若果你對這種集成安裝包害怕安全問(wèn)題,你可以到這種程序的官網(wǎng)下載之后在網(wǎng)上找配置教程就可以了。(說(shuō)真的,我真心的不會(huì )單獨去弄,我認為很麻煩。)
五、 PHP爬蟲(chóng)第二步
(感覺(jué)自己屁話(huà)很多,應該馬上來(lái)一段代碼?。?!)
<?php
// 爬蟲(chóng)核心功能:獲取網(wǎng)頁(yè)源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) php 的 file_get_contents 函數獲取百度首頁(yè)源碼,并傳給 $html 變量
echo $html;
// 輸出 $html
?>
爬蟲(chóng)網(wǎng)路核心功能早已寫(xiě)下來(lái)了,為什么說(shuō)就如此幾行代碼就把爬蟲(chóng)核心功能寫(xiě)下來(lái)了呢?我猜有人早已明白了吧,其實(shí)是因為爬蟲(chóng)是數據獲取的程序,就里面幾行代碼雖然早已才能獲取數據了,所以爬蟲(chóng)的核心功能早已寫(xiě)下來(lái)了??赡苡腥藭?huì )說(shuō)“你這個(gè)也很菜了吧!有哪些用?”,雖然我是太菜,但請別說(shuō)出來(lái),讓我好好裝個(gè)X。(又說(shuō)了兩行屁話(huà),不好意思。)
其實(shí)爬蟲(chóng)是拿來(lái)干嘛,主要看你想使它來(lái)干嘛。就像我前些日子為了好玩寫(xiě)了一個(gè)搜索引擎網(wǎng)站出來(lái),當然網(wǎng)站很菜,結果排序沒(méi)有規律,很多都查不到。我的搜索引擎的爬蟲(chóng)就是要寫(xiě)一個(gè)適合于搜索引擎的爬蟲(chóng)。所以為了便捷我也就用寫(xiě)搜索引擎的爬蟲(chóng)為目標講解。當然了,我搜索引擎的爬蟲(chóng)還是不夠建立,不健全的地方都是要大家自己去創(chuàng )造,去建立。
六、 搜索引擎爬蟲(chóng)的限制
搜索引擎的爬蟲(chóng)有時(shí)候不是不能那種網(wǎng)站的頁(yè)面獲取頁(yè)面源碼,而是有robot.txt文件,有該文件的網(wǎng)站,就代表站主不希望爬蟲(chóng)去爬取頁(yè)面源碼。(不過(guò)若果你就是想要獲取的話(huà),就算有也一樣會(huì )去爬吧?。?br /> 我搜索引擎的爬蟲(chóng)雖然還有好多不足而造成的限制,例如可能由于未能運行 JS 腳本所以未能獲取頁(yè)面源碼。又或則網(wǎng)站有反爬蟲(chóng)的機制引起不能獲取到頁(yè)面源碼。有反爬蟲(chóng)機制的網(wǎng)站就如:知乎,知乎就是有反爬蟲(chóng)的機制的網(wǎng)站。
七、以弄搜索引擎爬蟲(chóng)為例,準備寫(xiě)該爬蟲(chóng)須要的東西
PHP 編寫(xiě)基礎正則表達式(你也可以使用Xpath,對不起,我不會(huì )使用)數據庫的使用(本文使用 MySql 數據庫)運行環(huán)境(只要有能運行 PHP 網(wǎng)站的環(huán)境和數據庫就OK)
八、搜索引擎獲取頁(yè)面源碼并獲取頁(yè)面的標題信息
<?PHP
// 通過(guò) file_get_contents 函數獲取百度頁(yè)面源碼
$html = file_get_contents("https://www.baidu.com/index.html");
// 通過(guò) preg_replace 函數使頁(yè)面源碼由多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 通過(guò) preg_match 函數提取獲取頁(yè)面的標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOne,$titleArr);
// 由于 preg_match 函數的結果是數組的形式
$title = $titleArr[1];
// 通過(guò) echo 函數輸出標題信息
echo $title;
?>
報錯誤示例:
Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
https是SSL加密合同,如果出現獲取頁(yè)面晨報里面的錯誤,代表你的 PHP 可能少了OpenSSL 的模塊,你可以到網(wǎng)上查找解決辦法。
九、搜索引擎爬蟲(chóng)的特征
雖然我沒(méi)見(jiàn)過(guò)象“百度”,“Google”它們的爬蟲(chóng),可是我自己通過(guò)推測,以及在實(shí)際爬去過(guò)程當中遇見(jiàn)的一些問(wèn)題,自己總結的幾個(gè)特性。(可能有不對的地方,或者缺乏的地方,歡迎見(jiàn)諒,謝謝。)
通用性
通用性是因為我覺(jué)得搜索引擎的爬蟲(chóng)一開(kāi)始并不是針對哪一個(gè)網(wǎng)站制定的,所以要求能爬取到的網(wǎng)站盡可能的多,這是第一點(diǎn)。而第二點(diǎn),就是獲取網(wǎng)頁(yè)的信息就是這些,一開(kāi)始不會(huì )由于個(gè)別某些特殊小網(wǎng)站而舍棄個(gè)別信息不提取,舉個(gè)反例:一個(gè)小網(wǎng)站的一個(gè)網(wǎng)頁(yè)meta標簽里沒(méi)有描述信息(description)或者關(guān)鍵詞信息(keyword),就直接舍棄了描述信息或則關(guān)鍵詞信息的提取,當然假如真的某一個(gè)頁(yè)面沒(méi)有這種信息我會(huì )提取頁(yè)面里的文字內容作為填充,反正就是盡可能達到爬取的網(wǎng)頁(yè)信息每位網(wǎng)頁(yè)的信息項都要一樣。這是我覺(jué)得的搜索引擎爬蟲(chóng)的通用性,當然我的看法可能是錯誤的。(我說(shuō)得可能不是很好,我仍然在學(xué)習。)
不確定性
不確定性就是我的爬蟲(chóng)獲取哪些網(wǎng)頁(yè)我是控制不夠全面的,只能控制我能想到的情況,這也是由于我寫(xiě)的算法就是這樣的緣由,我的算法就是爬取獲取到的頁(yè)面里的所有鏈接,再去爬去獲取到的那些鏈接,其實(shí)是因為搜索引擎并不是搜某一些東西,而是盡可能的多,因為只有更多的信息,才能找到一個(gè)最貼切用戶(hù)想要的答案。所以我就認為搜索引擎的爬蟲(chóng)就要有不確定性。(我自己再看了一遍,也有點(diǎn)認為自己說(shuō)得有點(diǎn)使自己看不懂,請見(jiàn)諒,歡迎見(jiàn)諒,提問(wèn),謝謝了?。?br /> 下面的視頻是我的搜索網(wǎng)站的使用視頻,而搜到的信息就是通過(guò)自己寫(xiě)的 PHP 爬蟲(chóng)獲取到的。(這個(gè)網(wǎng)站我早已不再繼續維護了,所以有缺乏之處,請見(jiàn)諒。)

十、到如今可能出現的問(wèn)題
獲取的源碼出現亂碼
<?PHP
// 亂碼解決辦法,把其他編碼格式通過(guò) mb_convert_encoding 函數統一轉為 UTF-8 格式
$html = mb_convert_encoding($html,'UTF-8','UTF-8,GBK,GB2312,BIG5');
// 還有一種因為gzip所以出現亂碼的,我會(huì )在以后講
?>
2. 獲取不到標題信息
<?PHP
// 獲取不到標題信息解決辦法,首先判斷是否能獲取到頁(yè)面源碼
// 如果能獲取到但還是不能獲取到標題信息
// 我猜測的問(wèn)題是:因為我教的是使用正則表達式獲取的,源碼沒(méi)有變成一行,獲取起來(lái)就會(huì )出現問(wèn)題
$htmlOneLine=preg_replace("/\r|\n|\t/","",$html);
?>
3.獲取不到頁(yè)面源碼
<?PHP
// 像新浪微博你可能獲取到的是“Sina Visitor System”
// 解決辦法添加header信息
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n",
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 這樣就能獲取到新浪微博的頁(yè)面了
?>
十一、獲取一個(gè)網(wǎng)頁(yè)時(shí)的處理思路
我們先不去想好多網(wǎng)頁(yè),因為好多網(wǎng)頁(yè)也就是一個(gè)循環(huán)。
獲取頁(yè)面源碼通過(guò)源碼提取頁(yè)面的哪些信息提取的信息要如何處理處理后放不放進(jìn)數據庫
十二、按照十一的思路的代碼
<?php
// 一、獲取源碼
// 假設我們要獲取淘寶首頁(yè)
$html = file_get_content("https://www.taobao.com");
// 二、提取標題和文本
// 三、提取信息處理
// 處理頁(yè)面源碼,多行變單行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 獲取標題信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOneLine,$titleArr);
// 保留標題信息
$titleOK = $titleArr[1];
// 獲取頁(yè)面中的文本信息
// 處理前面不需要的head標簽
$htmlText = preg_replace("/<html>(.*)<\/head>/","",$htmlOneLine);
// 處理style和script標簽及內容
$htmlText = preg_replace("/<style(.*)>(.*)</style>|<script(.*)>(.*)</script>/iU","",$htmlText);
// 處理多余標簽
$htmlText = preg_replace("/<(\/)?(.+)>/","",$htmlText);
// 四、保存到數據庫
// 略
?>
十三、PHP 保存頁(yè)面的圖片思路
獲取頁(yè)面源碼獲取頁(yè)面的圖片鏈接使用函數保存圖片
十四、保存圖片示例代碼
<?php
// 使用file_get_contents()函數獲取圖片
$img = file_get_contents("http://127.0.0.1/photo.jpg");
// 使用file_put_contents()函數保存圖片
file_put_contents("photo.jpg",$img);
?>
十五、gzip解壓
本來(lái)我以為自己寫(xiě)的爬蟲(chóng)早已寫(xiě)得差不多了,就是不僅反爬蟲(chóng)的網(wǎng)站難以爬取外,應該是都可以爬了。但有三天我去嘗試爬去bilibili的時(shí)侯出現問(wèn)題了,我發(fā)覺(jué)如何我數據庫上面的都是亂碼,而且標題哪些的都沒(méi)有,好奇怪!后來(lái)我才曉得原先是因為GZIP的壓縮,原來(lái)我直接使用file_get_content函數獲取的頁(yè)面是未經(jīng)過(guò)解壓的頁(yè)面,所有都是亂碼!好了,然后我曉得問(wèn)題出現在哪里了,接下來(lái)就是想解決辦法了。(其實(shí)那時(shí)候的我是完全不知道如何解決解壓gzip的,都靠搜索引擎,哈哈哈哈哈)。
我得到了兩個(gè)解決辦法:
在 request header 那里告訴對方服務(wù)器,我這爬蟲(chóng)(不。。。應該是我這瀏覽器)不支持gzip的解壓,就麻煩你不要壓縮,直接把數據發(fā)給我吧!
// 這是request header(請求頭)
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n".
"accept-encoding:"
)
);
// 我把accept-encodeing(能接收編碼)設為空,代表不接受gzip
2. 如果告訴了對方服務(wù)器本瀏覽器(爬蟲(chóng))不支持解壓gzip,可他還是繼續發(fā)gzip的數據給你,那就沒(méi)有辦法了,只好默默的在搜索引擎找php解壓gzip的解壓函數——gzdecode()。
// 廢話(huà):好久沒(méi)更新了,因為近來(lái)又在重復造輪子,不過(guò)好開(kāi)心-- 2019.01.14
十六、子鏈接的獲取
網(wǎng)頁(yè)爬蟲(chóng)就好比手動(dòng)的網(wǎng)頁(yè)源碼另存為操作,可是假如真的是一個(gè)一個(gè)網(wǎng)址自動(dòng)輸入給爬蟲(chóng)去爬取的話(huà),那還倒不如人手另存為呢!所以在這里就得解析到這些子鏈接,一個(gè)網(wǎng)頁(yè)似乎會(huì )有好多的a標簽,而這種a標簽的href屬性值都會(huì )是一個(gè)子鏈接。(這句如何覺(jué)得有一點(diǎn)屁話(huà)呢?應該你們都曉得吧!)通過(guò)好多種工具的解析得到了原始的子鏈接(我沒(méi)用html的工具,就是用了正則表達式及工具)為什么叫原始數據,因為這些子鏈接有很多不是URL鏈接,又或則是一些不完整的鏈接,又或則你是要爬一個(gè)網(wǎng)站,不要爬蟲(chóng)跑出去的時(shí)侯,還得消除一些并非那種網(wǎng)站的鏈接,防止爬蟲(chóng)跑出去。下面我列出一些原始子鏈接。(其實(shí)就是我噴到的坑。。。)
http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
你可以看得到這兒有很多種鏈接,有完整的絕對路徑的鏈接,也有不完整的相對路徑鏈接,有的還跑來(lái)了javascript,如果是相對路徑或javascript的鏈接,直接給爬蟲(chóng)去爬,肯定使爬蟲(chóng)一臉懵,因為不完整或根本就不是一個(gè)鏈接。所以就須要對子鏈接補全或則扔掉。
十七、子鏈接的處理
上面屁話(huà)了一大堆后,接下來(lái)還是繼續屁話(huà)。好了,處理雖然就是去重、丟棄以及補全。
對于相同的子鏈接遺棄不保存對于相對路徑鏈接補全對于不是鏈接的鏈接遺棄(不是鏈接的鏈接是哪些東西?自己都認為的奇怪。。。。)
對于第一種我就不多說(shuō)了,相信你們都曉得該如何做。
對付第二種的方式我就寫(xiě)一個(gè)才能運行相對路徑的方式下來(lái)就OK了,通過(guò)父鏈接來(lái)進(jìn)行相對路徑轉絕對路徑。(有空補代碼給你們。。。不好意思了)
對于第三種也正則匹配一下就完了。
一個(gè)簡(jiǎn)單的開(kāi)源PHP爬蟲(chóng)框架『Phpfetcher』
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 482 次瀏覽 ? 2020-05-27 08:02
fanfank 文章作者
完整的代碼貼下來(lái)我看一下,或者在微博私信我,我幫你看一下
aa
//下面兩行促使這個(gè)項目被下載出來(lái)后本文件能直接運行
$demo_include_path = dirname(__FILE__) . ‘/../’;
set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
require_once(‘phpfetcher.php’);
class mycrawler extends Phpfetcher_Crawler_Default {
public function handlePage($page) {
var_dump($page);
//打印處當前頁(yè)面的第1個(gè)h1標題內榮(下標從0開(kāi)始)
$strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo $page->sel(‘//title’, 0)->plaintext;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
//任務(wù)的名子隨意起,這里把名子叫qqnews
//the key is the name of a job, here names it qqnews
‘qqnews’ => array(
‘start_page’ => ‘#8217;, //起始網(wǎng)頁(yè)
‘link_rules’ => array(
/*
* 所有在這里列舉的正則規則,只要能匹配到超鏈接,那么那條爬蟲(chóng)才會(huì )爬到那條超鏈接
* Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
*/
//’#news\.qq\.com/a/\d+/\d+\.htm$#’,
),
//爬蟲(chóng)從開(kāi)始頁(yè)面算起,最多爬取的深度,設置為2表示爬取深度為1
//Crawler’s max following depth, 1 stands for only crawl the start page
‘max_depth’ => 1,
) ,
);
$crawler->setFetchJobs($arrJobs)->run(); //這一行的療效和下邊兩行的療效一樣
其他的沒(méi)變
aa
public function read() {
$this->_strContent = curl_exec($this->_curlHandle);
是_strContent取到了false造成的 這個(gè)是啥緣由呢Page default.php
fanfank 文章作者
我這兒返回的是403 forbidden,查了一下曉得緣由了,因為user_agent的問(wèn)題csdn把爬蟲(chóng)給禁了。你可以這樣更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,當然你可以可以改得更真實(shí)一點(diǎn),例如哪些『Mozilla/5.0 AppleWebKit』之類(lèi)的
有些網(wǎng)站會(huì )依照UA來(lái)屏蔽懇求,可能是因為個(gè)別UA有惡意功擊的特點(diǎn),或者一些爬蟲(chóng)之類(lèi)的開(kāi)源爬蟲(chóng)框架,之前百度有一段時(shí)間屏蔽360瀏覽器就是通過(guò)360瀏覽器里一些特定的UA來(lái)做到的,當然后來(lái)360瀏覽器把UA給更改嗯,就須要依照其它特點(diǎn)屏蔽了。
所以你這兒先改一下user_agent吧。
aa
多謝哈
試著(zhù)改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
試了這兒的也不行 恐怕還是curl的問(wèn)題
fanfank 文章作者
我這兒執行都是正常的,結果也能下來(lái)。還是通過(guò)微博私信說(shuō)吧,這里說(shuō)得刷屏了
aa
圍脖id是?
fanfank 文章作者
另外是,你貼的代碼上面,標點(diǎn)符號不對啊,你的start_page對應那一行的標點(diǎn),怎么是英文的單冒號?后面的單冒號似乎也不是個(gè)單冒號吧?要全部用英語(yǔ)的單冒號才行。
aa
符號是對的哈 都是英語(yǔ)的 沒(méi)句型錯誤
joke
為什么匹配的內容都一樣?
代碼:
sel(‘//span[@id=”text110″]’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo “”;
echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
echo “”;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
‘joke’ => array(
‘start_page’ => ‘#8217;,
‘link_rules’ => array(
‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
),
‘max_depth’ => 2,
) ,
);
$crawler->setFetchJobs($arrJobs)->run();
fanfank 文章作者
你的代碼沒(méi)貼全,而且匹配的內容都一樣我沒(méi)很理解是哪些意思,這個(gè)問(wèn)題有點(diǎn)長(cháng),你直接在微博私信我,我幫你看一下
fanfank 文章作者
已經(jīng)修補了。之前的問(wèn)題是爬蟲(chóng)不認識站內鏈接,例如有的超鏈接是『/entry』這樣的,而不是『』?,F在最新的Phpfetcher早已就能辨識站內鏈接,可以試一下
joke
謝謝 ,搞定了
modejun
樓主您好,問(wèn)問(wèn)假如我曉得了一個(gè)網(wǎng)站開(kāi)源爬蟲(chóng)框架,但是要遞交post參數,這個(gè)要如何弄呢,朋友提供一下思路
fanfank 文章作者
提交post參數,那覺(jué)得場(chǎng)景很特殊的,因為這個(gè)就不是單純地按照鏈接爬取網(wǎng)頁(yè)內容了,而且假如真的提供這個(gè)功能,針對什么樣的鏈接什么樣的參數,怎么遞交,然后返回的內容是如何處理這種,目前我覺(jué)得似乎不太適宜爬蟲(chóng)做?;蛘吣阍谖⒉┧叫盼?,告訴我你的使用場(chǎng)景是哪些,我瞧瞧是不是考慮找時(shí)間加進(jìn)去
modejun
場(chǎng)景就是有一翻頁(yè)時(shí)用ajax post遞交的page參數,如果是get就太easy。還有順便問(wèn)問(wèn),如果翻頁(yè)我明天試了要解決的話(huà)就是調節深度,但是似乎最大是20,還有就是更改正則循環(huán)調用setFetchJobs這個(gè)方式,總是覺(jué)得不是這么完美,有哪些好的思路解決翻頁(yè)這個(gè)問(wèn)題嗎,現在公司在定方案我想多了解把這個(gè)框架的優(yōu)勢發(fā)揮下來(lái),感謝了。
fanfank 文章作者
如果像你說(shuō)的是個(gè)post懇求,那么它返回的應當不是一個(gè)HTML格式的文檔,通常都是json格式的,然后由當前頁(yè)面將異步返回的內容加載顯示下來(lái)。
你們的post懇求應當是有類(lèi)似pn,rn等參數,如果大家僅僅是想領(lǐng)到post懇求的所有內容,可以直接寫(xiě)一個(gè)for循環(huán),然后使用php的curl來(lái)直接發(fā)送post懇求獲取每一個(gè)頁(yè)面內容,可以不使用爬蟲(chóng),因為這個(gè)爬蟲(chóng)基本原理是針對GET懇求返回的HTML頁(yè)面的,然后手動(dòng)抽取HTML的標簽
最大深度可以更改類(lèi)『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』變量,把20改成-1就沒(méi)有限制了,不過(guò)建議還是設一個(gè)上限比較好
可以不需要循環(huán)更改正則呀,設置正則規則的可以是一個(gè)鏈表,把上面的所有你認為合適的正則都列上就可以,除非說(shuō)你的正則表達式還得依據頁(yè)面的某個(gè)參數或則內容不同而更改,那這個(gè)情況還是相對特殊了一點(diǎn)···
翻頁(yè)的解決,如果是GET就用爬蟲(chóng),如果是POST,那么直接for循環(huán)之后調用curl會(huì )更好。
??;;;
好像不錯
??;;;
能不能寫(xiě)個(gè)DOM選擇器和技巧的文檔,最好支持css選擇DOM標簽,有子節點(diǎn),父節點(diǎn),兄弟節點(diǎn)選擇才好
fanfank 文章作者
在這個(gè)項目的github頁(yè)面:,中文說(shuō)明的第2節上面,有介紹dom選擇器的文檔
jeremy
博主。。為什么https的頁(yè)面沒(méi)辦法懇求呢? 查看全部
報dom為空

fanfank 文章作者
完整的代碼貼下來(lái)我看一下,或者在微博私信我,我幫你看一下

aa
//下面兩行促使這個(gè)項目被下載出來(lái)后本文件能直接運行
$demo_include_path = dirname(__FILE__) . ‘/../’;
set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
require_once(‘phpfetcher.php’);
class mycrawler extends Phpfetcher_Crawler_Default {
public function handlePage($page) {
var_dump($page);
//打印處當前頁(yè)面的第1個(gè)h1標題內榮(下標從0開(kāi)始)
$strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo $page->sel(‘//title’, 0)->plaintext;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
//任務(wù)的名子隨意起,這里把名子叫qqnews
//the key is the name of a job, here names it qqnews
‘qqnews’ => array(
‘start_page’ => ‘#8217;, //起始網(wǎng)頁(yè)
‘link_rules’ => array(
/*
* 所有在這里列舉的正則規則,只要能匹配到超鏈接,那么那條爬蟲(chóng)才會(huì )爬到那條超鏈接
* Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
*/
//’#news\.qq\.com/a/\d+/\d+\.htm$#’,
),
//爬蟲(chóng)從開(kāi)始頁(yè)面算起,最多爬取的深度,設置為2表示爬取深度為1
//Crawler’s max following depth, 1 stands for only crawl the start page
‘max_depth’ => 1,
) ,
);
$crawler->setFetchJobs($arrJobs)->run(); //這一行的療效和下邊兩行的療效一樣
其他的沒(méi)變

aa
public function read() {
$this->_strContent = curl_exec($this->_curlHandle);
是_strContent取到了false造成的 這個(gè)是啥緣由呢Page default.php

fanfank 文章作者
我這兒返回的是403 forbidden,查了一下曉得緣由了,因為user_agent的問(wèn)題csdn把爬蟲(chóng)給禁了。你可以這樣更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,當然你可以可以改得更真實(shí)一點(diǎn),例如哪些『Mozilla/5.0 AppleWebKit』之類(lèi)的
有些網(wǎng)站會(huì )依照UA來(lái)屏蔽懇求,可能是因為個(gè)別UA有惡意功擊的特點(diǎn),或者一些爬蟲(chóng)之類(lèi)的開(kāi)源爬蟲(chóng)框架,之前百度有一段時(shí)間屏蔽360瀏覽器就是通過(guò)360瀏覽器里一些特定的UA來(lái)做到的,當然后來(lái)360瀏覽器把UA給更改嗯,就須要依照其它特點(diǎn)屏蔽了。
所以你這兒先改一下user_agent吧。

aa
多謝哈
試著(zhù)改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
試了這兒的也不行 恐怕還是curl的問(wèn)題

fanfank 文章作者
我這兒執行都是正常的,結果也能下來(lái)。還是通過(guò)微博私信說(shuō)吧,這里說(shuō)得刷屏了

aa
圍脖id是?

fanfank 文章作者
另外是,你貼的代碼上面,標點(diǎn)符號不對啊,你的start_page對應那一行的標點(diǎn),怎么是英文的單冒號?后面的單冒號似乎也不是個(gè)單冒號吧?要全部用英語(yǔ)的單冒號才行。

aa
符號是對的哈 都是英語(yǔ)的 沒(méi)句型錯誤

joke
為什么匹配的內容都一樣?
代碼:
sel(‘//span[@id=”text110″]’, 0)->plaintext);
if (!empty($strFirstH1)) {
echo “”;
echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
echo “”;
echo “\n”;
}
}
}
$crawler = new mycrawler();
$arrJobs = array(
‘joke’ => array(
‘start_page’ => ‘#8217;,
‘link_rules’ => array(
‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
),
‘max_depth’ => 2,
) ,
);
$crawler->setFetchJobs($arrJobs)->run();

fanfank 文章作者
你的代碼沒(méi)貼全,而且匹配的內容都一樣我沒(méi)很理解是哪些意思,這個(gè)問(wèn)題有點(diǎn)長(cháng),你直接在微博私信我,我幫你看一下

fanfank 文章作者
已經(jīng)修補了。之前的問(wèn)題是爬蟲(chóng)不認識站內鏈接,例如有的超鏈接是『/entry』這樣的,而不是『』?,F在最新的Phpfetcher早已就能辨識站內鏈接,可以試一下

joke
謝謝 ,搞定了

modejun
樓主您好,問(wèn)問(wèn)假如我曉得了一個(gè)網(wǎng)站開(kāi)源爬蟲(chóng)框架,但是要遞交post參數,這個(gè)要如何弄呢,朋友提供一下思路

fanfank 文章作者
提交post參數,那覺(jué)得場(chǎng)景很特殊的,因為這個(gè)就不是單純地按照鏈接爬取網(wǎng)頁(yè)內容了,而且假如真的提供這個(gè)功能,針對什么樣的鏈接什么樣的參數,怎么遞交,然后返回的內容是如何處理這種,目前我覺(jué)得似乎不太適宜爬蟲(chóng)做?;蛘吣阍谖⒉┧叫盼?,告訴我你的使用場(chǎng)景是哪些,我瞧瞧是不是考慮找時(shí)間加進(jìn)去

modejun
場(chǎng)景就是有一翻頁(yè)時(shí)用ajax post遞交的page參數,如果是get就太easy。還有順便問(wèn)問(wèn),如果翻頁(yè)我明天試了要解決的話(huà)就是調節深度,但是似乎最大是20,還有就是更改正則循環(huán)調用setFetchJobs這個(gè)方式,總是覺(jué)得不是這么完美,有哪些好的思路解決翻頁(yè)這個(gè)問(wèn)題嗎,現在公司在定方案我想多了解把這個(gè)框架的優(yōu)勢發(fā)揮下來(lái),感謝了。

fanfank 文章作者
如果像你說(shuō)的是個(gè)post懇求,那么它返回的應當不是一個(gè)HTML格式的文檔,通常都是json格式的,然后由當前頁(yè)面將異步返回的內容加載顯示下來(lái)。
你們的post懇求應當是有類(lèi)似pn,rn等參數,如果大家僅僅是想領(lǐng)到post懇求的所有內容,可以直接寫(xiě)一個(gè)for循環(huán),然后使用php的curl來(lái)直接發(fā)送post懇求獲取每一個(gè)頁(yè)面內容,可以不使用爬蟲(chóng),因為這個(gè)爬蟲(chóng)基本原理是針對GET懇求返回的HTML頁(yè)面的,然后手動(dòng)抽取HTML的標簽
最大深度可以更改類(lèi)『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』變量,把20改成-1就沒(méi)有限制了,不過(guò)建議還是設一個(gè)上限比較好
可以不需要循環(huán)更改正則呀,設置正則規則的可以是一個(gè)鏈表,把上面的所有你認為合適的正則都列上就可以,除非說(shuō)你的正則表達式還得依據頁(yè)面的某個(gè)參數或則內容不同而更改,那這個(gè)情況還是相對特殊了一點(diǎn)···
翻頁(yè)的解決,如果是GET就用爬蟲(chóng),如果是POST,那么直接for循環(huán)之后調用curl會(huì )更好。

??;;;
好像不錯

??;;;
能不能寫(xiě)個(gè)DOM選擇器和技巧的文檔,最好支持css選擇DOM標簽,有子節點(diǎn),父節點(diǎn),兄弟節點(diǎn)選擇才好

fanfank 文章作者
在這個(gè)項目的github頁(yè)面:,中文說(shuō)明的第2節上面,有介紹dom選擇器的文檔

jeremy
博主。。為什么https的頁(yè)面沒(méi)辦法懇求呢?
phpspider: 《我用爬蟲(chóng)三天時(shí)間“偷了”知乎一百萬(wàn)用戶(hù)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 461 次瀏覽 ? 2020-05-20 08:01
phpspider是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用本框架爬蟲(chóng)技術(shù)用什么語(yǔ)言,你不用了解爬蟲(chóng)的底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽、有些網(wǎng)站需要登入或驗證碼識別才會(huì )爬取等問(wèn)題。簡(jiǎn)單幾行PHP代碼,就可以創(chuàng )建自己的爬蟲(chóng),利用框架封裝的多進(jìn)程Worker解釋器,代碼更簡(jiǎn)練,執行效率更高速率更快。
demo目錄下有一些特定網(wǎng)站的爬取規則,只要你安裝了PHP環(huán)境,代碼就可以在命令行下直接跑。 對爬蟲(chóng)感興趣的開(kāi)發(fā)者可以加QQ群一起討論:147824717。
下面以糗事百科為例, 來(lái)看一下我們的爬蟲(chóng)長(cháng)哪些樣子:
$configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取內容頁(yè)的文章內容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取內容頁(yè)的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
爬蟲(chóng)的整體框架就是這樣, 首先定義了一個(gè)$configs鏈表, 里面設置了待爬網(wǎng)站的一些信息, 然后通過(guò)調用$spider = new phpspider($configs);和$spider->start();來(lái)配置并啟動(dòng)爬蟲(chóng).
更多詳盡內容爬蟲(chóng)技術(shù)用什么語(yǔ)言,移步到:
開(kāi)發(fā)文檔 查看全部
《我用爬蟲(chóng)三天時(shí)間“偷了”知乎一百萬(wàn)用戶(hù),只為證明PHP是世界上最好的語(yǔ)言 》所使用的程序
phpspider是一個(gè)爬蟲(chóng)開(kāi)發(fā)框架。使用本框架爬蟲(chóng)技術(shù)用什么語(yǔ)言,你不用了解爬蟲(chóng)的底層技術(shù)實(shí)現,爬蟲(chóng)被網(wǎng)站屏蔽、有些網(wǎng)站需要登入或驗證碼識別才會(huì )爬取等問(wèn)題。簡(jiǎn)單幾行PHP代碼,就可以創(chuàng )建自己的爬蟲(chóng),利用框架封裝的多進(jìn)程Worker解釋器,代碼更簡(jiǎn)練,執行效率更高速率更快。
demo目錄下有一些特定網(wǎng)站的爬取規則,只要你安裝了PHP環(huán)境,代碼就可以在命令行下直接跑。 對爬蟲(chóng)感興趣的開(kāi)發(fā)者可以加QQ群一起討論:147824717。
下面以糗事百科為例, 來(lái)看一下我們的爬蟲(chóng)長(cháng)哪些樣子:
$configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取內容頁(yè)的文章內容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取內容頁(yè)的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
爬蟲(chóng)的整體框架就是這樣, 首先定義了一個(gè)$configs鏈表, 里面設置了待爬網(wǎng)站的一些信息, 然后通過(guò)調用$spider = new phpspider($configs);和$spider->start();來(lái)配置并啟動(dòng)爬蟲(chóng).

更多詳盡內容爬蟲(chóng)技術(shù)用什么語(yǔ)言,移步到:
開(kāi)發(fā)文檔
phpcms跟dedecms比較
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 460 次瀏覽 ? 2020-04-26 11:01
首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。 查看全部
現在做一個(gè)網(wǎng)站是越來(lái)越容易了,很多公司和個(gè)人站長(cháng)開(kāi)始使用內容管理系統,在CMS方面,尤其是PHP的CMS,更是百花齊放,當然了,質(zhì)量也參差不齊。目前國外比較流行的有Dedecms和Phpcms,下面華來(lái)科技就這兩個(gè)cms做一下簡(jiǎn)單的對比。
首先從用戶(hù)界面來(lái)看,也就是管理后臺,首先是登陸,dedecms登錄框下邊的幾個(gè)廣告,著(zhù)實(shí)叫人煩躁,看著(zhù)不爽。當然了,畢竟人家靠這這點(diǎn)兒微薄的收入給俺開(kāi)發(fā)出了如此強悍的cms系統。phpcms的登入界面就沒(méi)有廣告了,盛大也不缺這點(diǎn)兒錢(qián)。當步入后臺主界面后,dedecms則變得有些狹小,界面也不是太華麗。在這一點(diǎn)上,phpcms做的很不錯,大氣,華麗。
從使用上來(lái)看,dedecms的操作去集中在了左側,條例太清楚。phpcms則把一級導航放到了里面,二級導航放到了左側,但是當選擇完后,卻沒(méi)有相應的指示,往往使用戶(hù)不知道自己處于那個(gè)導航之中,而且,phpcms在導航手動(dòng)收起功能,感覺(jué)象是雞肋,每次他收起時(shí),我正在進(jìn)行的操作還會(huì )被打亂,還不如沒(méi)有這個(gè)功能來(lái)的好,也許是我的瀏覽器是寬屏的,即使不收起,依然覺(jué)得左側的可編輯區域不小。
從模板開(kāi)發(fā)上,dedecms面向的是中級站長(cháng),甚至不懂編程的計算機愛(ài)好者都可以,而且,dedecms的標簽都不容許編程({dede:php}除外),完全都是模板標簽操作,入門(mén)十分簡(jiǎn)單,當然了這也是以犧牲可定制性為代價(jià)的。phpcms的模板制做,也取樣了dede同意的方法,標簽式,但是這個(gè)要比dedecms寬松的多,你可以在上面嵌入php代碼,可以在模板上面編程,雖然這是軟件開(kāi)發(fā)的三忌,但是模板的靈活性顯著(zhù)降低了,用戶(hù)有了更多的權限和方法去實(shí)現自己想要的療效。
SEO方面,做完網(wǎng)站了,如果他人都不來(lái)訪(fǎng)問(wèn),或者根本找不到你的網(wǎng)站,那就很沒(méi)面子了,而且也沒(méi)收入了。在SEO方面,這兩個(gè)cms做的都很不錯,最通常的關(guān)鍵詞和描述都有,而且是針對每位頁(yè)面的。默認都可以設置頁(yè)面生成的文件名稱(chēng)(補充一點(diǎn),這兩個(gè)cms都可以生成靜態(tài)的html頁(yè)面,這也對seo有很大幫助)。phpcms相對于dedecms的一些不足之處,網(wǎng)站的seo優(yōu)化沒(méi)有dedecms設計的好火車(chē)頭采集教程,dedecms可以很簡(jiǎn)單的在后臺控制url的生成方法,并且重命名,而phpcms貌似很復雜,最重要的是官方不給一點(diǎn)詳盡的說(shuō)明。
論壇活躍程度方面,如果使用dedecms遇到問(wèn)題,可以去任何一個(gè)峰會(huì )發(fā)貼,很快有人回復,其峰會(huì )的活躍程度可不是通常的高。而phpcms呢,畢竟這個(gè)產(chǎn)品是盛大開(kāi)發(fā)的,你問(wèn)客服吧,不敢,我相信大部分人都和我一樣,用的是免費的。所以只能老老實(shí)實(shí)的去峰會(huì )發(fā)貼,希望有人回答,但是峰會(huì )活躍程度遠不如dedecms,而且phpcms還同時(shí)維護了兩個(gè)版本,一個(gè)2008(聽(tīng)這名子,盛大也很懶了吧,4年不更新了),一個(gè)V9。
其他方面,很多人離開(kāi)dedecms而轉投phpcms,還有一個(gè)很重要的方面,那就是phpcms有一個(gè)dede所沒(méi)有的功能――站群,當年我就是,從一個(gè)站長(cháng)峰會(huì )上面看見(jiàn)了站群的概念,看了看仍然使用的dedecms很是沮喪,果斷Google了一下支持站群的cms,然后轉入了phpcms門(mén)下。
總結火車(chē)頭采集教程,比較了這么多,兩個(gè)cms都各有千秋,其實(shí)對于用戶(hù)來(lái)說(shuō),還是使用習慣,當我們一旦習慣了一個(gè)工具的時(shí)侯,自然都會(huì )得心應手。
PHP教程—DedeCMS二次開(kāi)發(fā)(二)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 428 次瀏覽 ? 2020-04-10 11:01
織夢(mèng)內容管理系統(DedeCMS),是一個(gè)集內容發(fā)布、編輯、管理檢索等于一體的網(wǎng)站管理系統(Web CMS),他擁有美國CMS諸多特性之外,還結合中國用戶(hù)的須要,對內容管理系統概念進(jìn)行明晰剖析和定位。
DedeCMS二次開(kāi)發(fā)
1、DedeCMS的二次開(kāi)發(fā)
為了使更多人了解二次開(kāi)發(fā),并更方便的了解DedeCMS的二次開(kāi)發(fā),下面將會(huì )簡(jiǎn)單的介紹關(guān)于DedeCMS二次開(kāi)發(fā)的一些基礎和大綱
2、DedeCMS二次開(kāi)發(fā)必備基礎:
· 非常熟悉HTML
· 熟悉p+CSS的布局
· 扎實(shí)的PHP基礎php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),熟悉結構化編程,了解OOP,并能看懂和使用
· 熟悉MYSQL,掌握SQL語(yǔ)言
3、DedeCMS二次開(kāi)發(fā)學(xué)習過(guò)程
· 理解CMS是哪些
· 熟悉DedeCMS的功能(如:欄目的分類(lèi),文檔管理,模型的使用,系統的設置等常用的功能)
· 掌握DedeCMS的模板標簽使用及原理
· DedeCMS目錄結構剖析 熟悉每位文件夾上面主要裝哪些文件,這樣在二次開(kāi)發(fā)的時(shí)侯曉得在那個(gè)文件夾下的哪些文件更改
目錄結構摘要:
./a 生成文件儲存路徑 .
/data 緩存文件及數據中心
/admin 管理后臺數據
/backupdata 備份數據
/cache 緩存文件
/enums 級別聯(lián)動(dòng)數據,JS,枚舉類(lèi)型的緩存文件
/js 常用的JS
/mark 水印相關(guān)文件
/module 模塊安裝文件
/rss Rss相關(guān)
/sessions Session 存放路徑
/textdata 文本數據
/tplcache 模板緩存
/uploadtmp 上傳文件緩存位置
/ziptmp zip包解壓緩存位置 ……
DedeCMS文件結構剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大約作用以后,可以便捷的對文件進(jìn)行更改
文件結構摘要:
common.inc.php 數據庫配置文件
config.cache.bak.php 后臺系統配置備份
config.cache.inc.php 后臺系統配置文件緩存
downmix.data.php 采集混淆緩存文件
mysql_error_track.inc MYSQL錯誤志
safequestions.php 安全問(wèn)題
sitemap.html 站點(diǎn)地圖
sys_pay.cache.php 支付網(wǎng)段配置
template.rand.php 隨機模板設置 ……
· DedeCMS數據庫結構剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解幾個(gè)核心表的設計及數組的含意,方便領(lǐng)到新的需求以后,能快速的判定是否加數組,還是新建表來(lái)處理。同時(shí)也能理解DedeCMS的數據庫設計思想,把有用的設計思路加到自己的系統中。
· DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登錄,注冊,文檔管理,權限控制,分類(lèi)管理,模型設置等一些常用流程控制。對幾個(gè)核心文件進(jìn)行解剖,了解其編程方法及安全機制
· DedeCMS插件的開(kāi)發(fā)(****式插件和內嵌式插件) 熟悉兩種插件的編撰,插件的導出導入php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),插件搭配模型的使用
作為國外第一個(gè)開(kāi)源的內容管理系統,DedeCMS在創(chuàng )建以來(lái)都在摸索中國互聯(lián)網(wǎng)內容管理系統的公路,并且推動(dòng)諸多開(kāi)源CMS前進(jìn)的公路,程序由當初個(gè)人作品,現已成立團隊,在提高用戶(hù)服務(wù)、提高產(chǎn)品質(zhì)量的同時(shí),對中國網(wǎng)站內容管理系統進(jìn)行研究,成為目前市場(chǎng)上最受歡迎的內容管理系統。 查看全部

織夢(mèng)內容管理系統(DedeCMS),是一個(gè)集內容發(fā)布、編輯、管理檢索等于一體的網(wǎng)站管理系統(Web CMS),他擁有美國CMS諸多特性之外,還結合中國用戶(hù)的須要,對內容管理系統概念進(jìn)行明晰剖析和定位。
DedeCMS二次開(kāi)發(fā)
1、DedeCMS的二次開(kāi)發(fā)
為了使更多人了解二次開(kāi)發(fā),并更方便的了解DedeCMS的二次開(kāi)發(fā),下面將會(huì )簡(jiǎn)單的介紹關(guān)于DedeCMS二次開(kāi)發(fā)的一些基礎和大綱
2、DedeCMS二次開(kāi)發(fā)必備基礎:
· 非常熟悉HTML
· 熟悉p+CSS的布局
· 扎實(shí)的PHP基礎php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),熟悉結構化編程,了解OOP,并能看懂和使用
· 熟悉MYSQL,掌握SQL語(yǔ)言
3、DedeCMS二次開(kāi)發(fā)學(xué)習過(guò)程
· 理解CMS是哪些
· 熟悉DedeCMS的功能(如:欄目的分類(lèi),文檔管理,模型的使用,系統的設置等常用的功能)
· 掌握DedeCMS的模板標簽使用及原理
· DedeCMS目錄結構剖析 熟悉每位文件夾上面主要裝哪些文件,這樣在二次開(kāi)發(fā)的時(shí)侯曉得在那個(gè)文件夾下的哪些文件更改
目錄結構摘要:
./a 生成文件儲存路徑 .
/data 緩存文件及數據中心
/admin 管理后臺數據
/backupdata 備份數據
/cache 緩存文件
/enums 級別聯(lián)動(dòng)數據,JS,枚舉類(lèi)型的緩存文件
/js 常用的JS
/mark 水印相關(guān)文件
/module 模塊安裝文件
/rss Rss相關(guān)
/sessions Session 存放路徑
/textdata 文本數據
/tplcache 模板緩存
/uploadtmp 上傳文件緩存位置
/ziptmp zip包解壓緩存位置 ……
DedeCMS文件結構剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大約作用以后,可以便捷的對文件進(jìn)行更改
文件結構摘要:
common.inc.php 數據庫配置文件
config.cache.bak.php 后臺系統配置備份
config.cache.inc.php 后臺系統配置文件緩存
downmix.data.php 采集混淆緩存文件
mysql_error_track.inc MYSQL錯誤志
safequestions.php 安全問(wèn)題
sitemap.html 站點(diǎn)地圖
sys_pay.cache.php 支付網(wǎng)段配置
template.rand.php 隨機模板設置 ……
· DedeCMS數據庫結構剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解幾個(gè)核心表的設計及數組的含意,方便領(lǐng)到新的需求以后,能快速的判定是否加數組,還是新建表來(lái)處理。同時(shí)也能理解DedeCMS的數據庫設計思想,把有用的設計思路加到自己的系統中。
· DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登錄,注冊,文檔管理,權限控制,分類(lèi)管理,模型設置等一些常用流程控制。對幾個(gè)核心文件進(jìn)行解剖,了解其編程方法及安全機制
· DedeCMS插件的開(kāi)發(fā)(****式插件和內嵌式插件) 熟悉兩種插件的編撰,插件的導出導入php網(wǎng)站分類(lèi)目錄程序 網(wǎng)址導航程序 織夢(mèng)二次開(kāi)發(fā),插件搭配模型的使用
作為國外第一個(gè)開(kāi)源的內容管理系統,DedeCMS在創(chuàng )建以來(lái)都在摸索中國互聯(lián)網(wǎng)內容管理系統的公路,并且推動(dòng)諸多開(kāi)源CMS前進(jìn)的公路,程序由當初個(gè)人作品,現已成立團隊,在提高用戶(hù)服務(wù)、提高產(chǎn)品質(zhì)量的同時(shí),對中國網(wǎng)站內容管理系統進(jìn)行研究,成為目前市場(chǎng)上最受歡迎的內容管理系統。


