用了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