A. php 百度 知道數據採集
問題其實不難,自己都能寫。給你幾個思路吧:
1.在網路知道中,輸入linux,然後會出現列表。復制瀏覽器地址欄內容。
然後翻頁,在復制地址欄內容,看看有什麼不同,不同之處,就是你要循環分頁的i值。
當然這個是笨方法。
2.使用php的file或者file_get_contents函數,獲取鏈接URL的內容。
3.通過php正則表達式,獲取你需要的3個欄位內容。
4.寫入資料庫。
需要注意的是,網路知道有可能做了防抓取的功能,你剛一抓幾個頁面,可能會被禁止。
建議也就抓10頁數據。
其實不難,你肯定寫的出來。 還有,網上應該有很多抓取工具,你找找看,然後將抓下來的數據
在做分析。寫入資料庫。
B. 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'
不知道你明白了沒有
C. php循環採集出文章列表
在你的代碼基礎上稍微修改了一下 如下
<?php
header("Content-type: text/html; charset=gb2312");
$url = "http://top.qidian.com/Book/TopDetail.aspx?TopType=6"; //目標站
$fp = @fopen($url, "r") or die("超時");
$fcontents = file_get_contents($url);
preg_match_all("/ <a target=\"_blank\" href=\"http:\/\/www.qidian.com\/Book\/(.*?)\.aspx\"/is", $fcontents, $regs);
print_r($regs[0]);
?>
D. php 按照數字大小排序 關於PHP採集
$s = '<a href="123" title="第一">第一</a>
<a href="126" title="第三">第三</a>
<a href="128" title="第四">第四</a>
<a href="125" title="第二">第二</a>
<a href="1250" title="第五">第五</a>';
preg_match_all('|<a[^>]*href="([^>]+)"[^>]*>(.*)</a>|isU',$s,$data);
$tmp_data = array();
for($i=0;$i<count($data[1]);$i++){
$tmp_data[$data[1][$i]] = $data[0][$i];
}
ksort($tmp_data);
var_mp($tmp_data);
E. PHP如何遍歷指定文件夾,獲取所有文件列表並生成下載鏈接
試編寫代碼如下:
<?php
$dir="D:/WWW/ftp";//指定的路徑
$sitepath='http://localhost/ftp/';
//遍歷文件夾下所有文件
if(false!=($handle=opendir($dir))){
echo"$dir目錄下的文件列表:<BR/>";
$i=0;
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."&&!is_dir($dir.'/'.$file)){
echo'<ahref="'.$sitepath.$file.'">'.$file.'</a><br/>';
}
}
//關閉句柄
closedir($handle);
}
?>
代碼中需要提示的是:
如果是運行於互聯網上,需要考慮文件的訪問安全性。
運行截圖: