用了147seo的采集工具采集數據,它與火車頭和八爪魚等不一樣,采集到的每一篇文章都單獨保存成一個txt文件,文章標題即txt的文件名稱,文章內容就寫入txt中。對于這樣的數據處理之前并沒有做過,但大致思路就是通過opendir和readdir遍歷文件夾,再利用fread、file_get_contents等讀取內容即可。
我就用file_get_contents了。核心代碼如下:
//讀取文件夾 public function read_file(){ header("content-type:text/html;charset=utf-8"); // 獲取文件夾中的所有txt文件名 $dir = "art/"; //這里輸入其他路徑 $handle = opendir($dir."."); $row = array(); while (false!=($file=readdir($handle))){ if($file!="."&&$file!=".."){ $row[]['name'] = $file;//輸出文件名 } } $files = []; foreach ($row as $k => $v) { $files[] = iconv('GBK','utf-8',$row[$k]['name']); //這里需要轉碼,要不會出現亂碼 } //$files是該文件夾下所有txt文件的名字 foreach ($files as $k => $v) { $this->read_txt($files[$k]);//這里循環讀取每一個txt文件內的內容并做數據庫處理 } closedir($handle); exit; }
//讀取txt文件 protected function read_txt($file_name){ header("content-type:text/html;charset=utf-8"); $fname = 'http://www.multi.com/art/'.$file_name; $fname=iconv('utf-8','GBK',$fname); //這里需要再次轉碼,要不get不到文件 $file_name=preg_replace('/\(.*?\)|(.*?)|\s+|\.txt|\.|_|【.*?】|"|\'|\[.*?\]|-|「.*?」|『.*?』|\d+月\d+日|.*?\|/i','',$file_name); //去除一些標題中的內容,這個根據你的需要修改或者刪除 $cont=file_get_contents($fname); $cont=preg_replace('/原標題.*?<|責任編輯.*</','<',$cont); //簡單去除一些正文內容,根據你的需要修改或刪除 $arr=array( 'title'=>removeEmojiChar($file_name), 'cont'=>removeEmojiChar($cont) ); M('Article')->add($arr); //寫入數據庫 }重點是兩次iconv轉碼需要注意一下。
© 致遠 2022-02-08,原創內容,轉載請注明出錯:php批量讀取txt文件并寫入mysql