php自動採集
A. 怎麼用php採集網站數據
簡單的分了幾個步驟:
1、確定採集目標
2、獲取目標遠程頁面內容(curl、file_get_contents)
3、分析頁面html源碼,正則匹配你需要的內容(preg_match、preg_match_all),這一步最為重要,不同頁面正則匹配規則不一樣
4、入庫
B. php一個更新 大神來幫一下
刪除button代碼,在<body>處增加:
<body onload="start()">
C. PHP中怎樣實現文章採集
只舉例說明,生產環境你自己根據情景去搞
$url = 'www.domain.com';
$content = file_get_content($url);//抓取網頁全部內容
preg_match( string pattern, string subject [, array matches ] );//正則獲取自己需要的內容
入庫~
完事了。。。
當然,情形復雜,例如需要登錄,採集目標限制等問題,這再說...
實際使用的時候,可以直接使用Snoopy類,提供好多方法供使用,比自己去造輪子要安全,當然,你可以在她的基礎上再去造輪子~~~
D. php採集大數據的方案
1、建議你讀寫數據和下載圖片分開,各用不同的進程完成。
比如說,取數據用get-data.php,下載圖片用get-image.php。
2、多進程的話,php可以簡單的用pcntl_fork()。這樣可以並發多個子進程。
但是我不建議你用fork,我建議你安裝一個gearman worker。這樣你要並發幾個,就啟幾個worker,寫代碼簡單,根本不用在代碼里考慮thread啊,process等等。
3、綜上,解決方案這樣:
(1)安裝gearman worker。
(2)寫一個get-data.php,在crontab里設置它每5分鍾執行一次,只負責讀數據,然後把讀回來的數據一條一條的扔到 gearman worker的隊列里;
然後再寫一個處理數據的腳本作為worker,例如叫process-data.php,這個腳本常駐內存。它作為worker從geraman 隊列里讀出一條一條的數據,然後跟你的資料庫老數據比較,進行你的業務邏輯。如果你要10個並發,那就啟動10個process-data.php好了。處理完後,如果圖片地址有變動需要下載圖片,就把圖片地址扔到 gearman worker的另一個隊列里。
(3)再寫一個download-data.php,作為下載圖片的worker,同樣,你啟動10個20個並發隨便你。這個進程也常駐內存運行,從gearman worker的圖片數據隊列里取數據出來,下載圖片
4、常駐進程的話,就是在代碼里寫個while(true)死循環,讓它一直運行好了。如果怕內存泄露啥的,你可以每循環10萬次退出一下。然後在crontab里設置,每分鍾檢查一下進程有沒有啟動,比如說這樣啟動3個process-data worker進程:
* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php >> /dev/null 2>&1'
* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php >> /dev/null 2>&1'
* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php >> /dev/null 2>&1'
不知道你明白了沒有
E. php高手,dedecms(織夢)系統怎麼弄才能做到(定時自動採集)求指導……謝謝……
這個系統是PHP寫的,雖然PHP可以寫計劃任務的程序,但是他需要有人訪問站點進行觸發執行,否則他自己不會執行。
F. php如何採集正在連載的小說,如何做到實時更新能否自動採集
沒辦法 真正的實時採集
只能 提高採集頻率 去檢測是否有更新
比如 每5分鍾 去 那個網站上 採集 檢測是否有更新 有更新 就採集下來
G. php採集數據怎麼做啊
用fopen/file/file_get_contents/curl之類的函數將遠程頁面獲得內容, 採用正則或過濾之類的獲得自己所需要的東西, 最好寫入相應的資料庫保存起來。
H. PHP 採集程序中常用的函數
復制代碼
代碼如下:
//獲得當前的腳本網址
function
get_php_url()
{
if(!empty($_SERVER[」REQUEST_URI」]))
{
$scriptName
=
$_SERVER[」REQUEST_URI」];
$nowurl
=
$scriptName;
}
else
{
$scriptName
=
$_SERVER[」PHP_SELF」];
if(empty($_SERVER[」QUERY_STRING」]))
$nowurl
=
$scriptName;
else
$nowurl
=
$scriptName.」?」.$_SERVER[」QUERY_STRING」];
}
return
$nowurl;
}
//把全形數字轉為半形數字
function
GetAlabNum($fnum)
{
$nums
=
array(」0」,」1」,」2」,」3」,」4」,」5」,」6」,」7」,」8」,」9」);
$fnums
=
「0123456789″;
for($i=0;$i<=9;$i++)
$fnum
=
str_replace($nums[$i],$fnums[$i],$fnum);
$fnum
=
ereg_replace(」[^0-9\.]|^0{1,}」,」」,$fnum);
if($fnum==」」)
$fnum=0;
return
$fnum;
}
//去除HTML標記
function
Text2Html($txt)
{
$txt
=
str_replace(」
「,」」,$txt);
$txt
=
str_replace(」<」,」<」,$txt);
$txt
=
str_replace(」>」,」>」,$txt);
$txt
=
preg_replace(」/[\r\n]{1,}/isU」,」<br/>\r\n」,$txt);
return
$txt;
}
//清除HTML標記
function
ClearHtml($str)
{
$str
=
str_replace('<','<',$str);
$str
=
str_replace('>','>',$str);
return
$str;
}
//相對路徑轉化成絕對路徑
function
relative_to_absolute($content,
$feed_url)
{
preg_match('/(http|https|ftp):\/\//',
$feed_url,
$protocol);
$server_url
=
preg_replace(」/(http|https|ftp|news):\/\//」,
「」,
$feed_url);
$server_url
=
preg_replace(」/\/.*/」,
「」,
$server_url);
if
($server_url
==
」)
{
return
$content;
}
if
(isset($protocol[0]))
{
$new_content
=
preg_replace('/href=」\//',
『href=」『.$protocol[0].$server_url.'/',
$content);
$new_content
=
preg_replace('/src=」\//',
'src=」『.$protocol[0].$server_url.'/',
$new_content);
}
else
{
$new_content
=
$content;
}
return
$new_content;
}
//取得所有鏈接
function
get_all_url($code){
preg_match_all('/<a\s+href=[」|\']?([^>」\'
]+)[」|\']?\s*[^>]*>([^>]+)<\/a>/i',$code,$arr);
return
array('name'=>$arr[2],'url'=>$arr[1]);
}
//獲取指定標記中的內容
function
get_tag_data($str,
$start,
$end)
{
if
(
$start
==
」
||
$end
==
」
)
{
return;
}
$str
=
explode($start,
$str);
$str
=
explode($end,
$str[1]);
return
$str[0];
}
//HTML表格的每行轉為CSV格式數組
function
get_tr_array($table)
{
$table
=
preg_replace(」『<td[^>]*?>'si」,'」『,$table);
$table
=
str_replace(」</td>」,'」,',$table);
$table
=
str_replace(」</tr>」,」{tr}」,$table);
//去掉
HTML
標記
$table
=
preg_replace(」『<[\/\!]*?[^<>]*?>'si」,」」,$table);
//去掉空白字元
$table
=
preg_replace(」『([\r\n])[\s]+'」,」」,$table);
$table
=
str_replace(」
「,」」,$table);
$table
=
str_replace(」
「,」」,$table);
$table
=
explode(」,{tr}」,$table);
array_pop($table);
return
$table;
}
//將HTML表格的每行每列轉為數組,採集表格數據
function
get_td_array($table)
{
$table
=
preg_replace(」『<table[^>]*?>'si」,」」,$table);
$table
=
preg_replace(」『<tr[^>]*?>'si」,」」,$table);
$table
=
preg_replace(」『<td[^>]*?>'si」,」」,$table);
$table
=
str_replace(」</tr>」,」{tr}」,$table);
$table
=
str_replace(」</td>」,」{td}」,$table);
//去掉
HTML
標記
$table
=
preg_replace(」『<[\/\!]*?[^<>]*?>'si」,」」,$table);
//去掉空白字元
$table
=
preg_replace(」『([\r\n])[\s]+'」,」」,$table);
$table
=
str_replace(」
「,」」,$table);
$table
=
str_replace(」
「,」」,$table);
$table
=
explode('{tr}',
$table);
array_pop($table);
foreach
($table
as
$key=>$tr)
{
$td
=
explode('{td}',
$tr);
array_pop($td);
$td_array[]
=
$td;
}
return
$td_array;
}
//返回字元串中的所有單詞
$distinct=true
去除重復
function
split_en_str($str,$distinct=true)
{
preg_match_all('/([a-zA-Z]+)/',$str,$match);
if
($distinct
==
true)
{
$match[1]
=
array_unique($match[1]);
}
sort($match[1]);
return
$match[1];
}
I. php自動採集如何實現
PHP自動採集能一定程度的實現,部分網站的頁面結構存在一定的共通點,比如文章內容頁的標題,不少網站是標記在<h1>里的,實在不行,就採集<title>,絕對能採到,然後、過濾掉title裡面的網站名稱。
採集文章內容就相對麻煩,但是通過層層分析,層層剝離,一定要進行大量的網站分析,寫出多套通用性比較強的採集規則,程序在採集的時候也要進行大量分析。
有幾點是可以肯定的,那就是絕對不能要求採集效果達到為某個網站單獨寫採集規則來的效果好,也絕對不是能匹配任意網站,頂多能匹配部分網站。
J. php使用3種方法實現數據採集 什麼叫採集
下面的php代碼可以將HTML表格的每行每列轉為數組,採集表格數據
<?php function get_td_array($table) { $table = preg_replace("'<table[^>]*?>'si","",$table); $table = preg_replace("'<tr[^>]*?>'si","",$table); $table = preg_replace("'<td[^>]*?>'si","",$table); $table = str_replace("</tr>","{tr}",$table); $table = str_replace("</td>","{td}",$table); //去掉 HTML 標記 $table = preg_replace("'<[/!]*?[^<>]*?>'si","",$table); //去掉空白字元 $table = preg_replace("'([rn])[s]+'","",$table); $table = str_replace(" ","",$table); $table = str_replace(" ","",$table); $table = explode('{tr}', $table); array_pop($table); foreach ($table as $key=>$tr) { $td = explode('{td}', $tr); array_pop($td); $td_array[] = $td; } return $td_array; } ?>