tp5 如何做数据采集

第一步:把要采集的 链接  准备好

可以是1个页面,也可以是多个

比如

在这里插入图片描述

	第2步:把页面下载到本地我用迅雷下载的,新建任务,就可以批量下载网页第3步:打开 tp,新建路由Route::rule('home_caiji','home/xiazai/caiji'); 	// 测试采集第4步:新建 xiazai 控制器,内容如下

如下,是整个控制器内容,在浏览器运行即可

获取title,content的时候,我是用 正则匹配 html 标签,获取的
其中 ([\s\S]?) 是我们想要获取的内容,[\s\S]?是我们匹配标签的时候,
如果标签内容不一样,可以用[\s\S]*?来忽略不一样的标签,

比如匹配内容的时候

醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声。沙场秋点兵。
马作的卢飞快,弓如霹雳弦惊。了却君王天下事,赢得生前身后名。可怜白发生! 明月别枝惊鹊,清风半夜鸣蝉。稻花香里说丰年,听取蛙声一片。
七八个星天外,两三点雨山前。旧时茅店社林边,路转溪桥忽见。(溪桥 一作:溪头) 这两个内容标签,格式是一样的,只是id不一样,我们匹配的时候,就要忽略id 来匹配中间的内容使用方法如下 preg_match('/([\s\S]*?)<\/div>/',$val,$content);

下面是控制器方法

showDir($dir);}// tp 里遍历文件夹,做批量采集
function showDir($filedir){if(is_dir($filedir)){//打开目录  $dir = @ dir($filedir);  while (($file = $dir->read())!==false){  if(is_dir($filedir."/".$file) AND ($file!=".") AND ($file!="..")) {  $this->showDir($filedir."/".$file);  echo '111';} else {if ($file != "." and $file != ".."){  $this->getDBData($filedir.'/'.$file,$file);echo  $filedir.'/'.$file.'
';echo '222';//echo $file;} } }$dir->close();}else{$this->getDBData($filedir);echo $filedir;echo '333';} } function getDBData($filename,$file) //file指文件名100000.HTML {preg_match('/(\d{0,20})\.aspx/',$file,$ids); // 读取 单个网页 源代码$urls=file_get_contents($filename); // 获取一首诗词preg_match_all('/

([\s\S]*?)<\/b>/',$val,$title);preg_match('/([\s\S]*?)<\/div>/',$val,$content);// var_dump($title);// die;if(isset($title[1])){$data['art_title'] = $title[1];}if(isset($content[1])){$data['art_content'] = $content[1];}// 我要插入文章表标题内容和art_id,关联表插入type_id,// 先插入关联表,获取id,插入文章表art_id// 关联表的 id 是文章表的art_id, 其中 type_id 从cate表中获取// 匹配 type_id$bb['uid'] = '11';$type_name = explode('·',$data['art_title']);//有的词名不对,我拼接了一下if(!isset($type_name[1])){// 拼接词名,获取词牌$dian = strpos($data['art_content'],",");$ju = strpos($data['art_content'],"。");if($dian < $ju){$con = explode(',',$data['art_content']); // 有的第一句是,号,有的是句号$con_ci = $con[0];$data['art_title'] = $data['art_title'].'·'.$con_ci;// var_dump($data['art_title']);// echo '111';// echo '


';}else{$con = explode('。',$data['art_content']); // 有的第一句是,号,有的是句号$con_ci = $con[0];$data['art_title'] = $data['art_title'].'·'.$con_ci;// var_dump($data['art_title']);// echo '222';// echo '
';}}$type_name222 = explode('·',$data['art_title']);$type_name222 = $type_name222[0];// 从 cate 表中获取 type_id$type = DB::name('cate')->where('name',$type_name222)->find();if(isset($type['id'])){$bb['type_id'] = $type['id'];}else{$bb['type_id'] = '74';}// 同时插入两张表,它的id是article的art_id$res = DB::name('aaguanlian')->insert($bb);// 这个方法可以得到新插入的id$art_id = Db::name('aaguanlian')->getLastInsID(); // 最后插入文章表$data['art_id'] = $art_id;$data['art_author'] = '辛弃疾';$data['create_time'] = date('Y-m-d H:i:s');$result = DB::name('article_ci')->insert($data);} }

}
?>


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部