[麦先生]使用正则做一个简单的数据采集 - 麦先生
做数据采集的流程:
进入一个网站后首先要查看网页源代码,审查检测源代码中是否存在我们需要的内容,如果有则可以直接使用正则匹配的方式来进行数据的抓取和提取;
假如我们需要的内容是由网站的js动态生成的,我们就不能直接对网站进行正则匹配的方式进行数据抓取,这时我们需要打开(注:我用的火狐)Firebug网络中查看服务器传输回的数据里可以找到服务器返回的源码,反而更加便捷;
在PHP中有一些内置的函数可以帮助我们更快捷的抓取网页源代码比如:file_get_contents; 包括正则匹配里常用的preg_match,preg_match_all;正确并熟练的使用PHP内置函数和方法可以极大节省我们的时间;
class PHP1
{
/**
* 采集详情页
*/
public function getDetailPage($url)
{
//获取源代码
$str = Curl::get($url);
//提取标题内容
preg_match('/
(.*).*发布日期:(.*)  来源.*(.*).*.*转载请注明来源.*.*(.*)转载请注明来源.*/isU', $str, $temp);
//创建pdo对象
$pdo = new PDO('mysql:host=localhost;dbname=lamp;charset=utf8;port=3306','root','');
//发送预处理指令
$stmt = $pdo->prepare('insert into article (title, con, intro, time)values(:title, :con, :intro, :time)');
//参数的绑定
$arr = array(
':title'=>$temp[1],
':con'=>$temp[4],
':intro'=>$temp[3],
':time'=>$temp[2]
);
$stmt->execute($arr);
$id = $pdo->lastInsertId();
return $id;
}
/**
* 采集列表页 获取详情页的url
*/
public function getListUrl($url)
{
//获取当前列表页中的源代码
$data = Curl::get($url);
if(empty($data)){
return false;
}
//正则匹配
preg_match_all('/
.*.*/isU', $data, $temp);
//返回结果
return $temp[1];
}
/**
* 开始采集
*/
public function startCollect(){
$urls = $this->getListUrl('http://www.php1.cn/category/44.html');
//遍历
foreach ($urls as $key => $value) {
$this->getDetailPage($value);
}
}
}
/**
* curl工具类
*/
class Curl{
public static function get($url){
//初始化curl资源
$ch = curl_init($url);
//设置请求选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//发送请求
$res = curl_exec($ch);
//
return $res;
}
}
// $res = get('http://www.php1.cn/Content/XiaoXinGaoXiaoLvDe_sql_ChaXunTaYeHuiDaoZhiWangZhanXiangYingBianMan.html');
//创建对象
// $obj = new PHP1;
// $url = 'http://www.php1.cn/Content/XiaoXinGaoXiaoLvDe_sql_ChaXunTaYeHuiDaoZhiWangZhanXiangYingBianMan.html';
// $res = $obj->getDetailPage($url);
//读取列表页的内容
// $obj->getListUrl('http://www.php1.cn/category/44.html');
// $obj -> startCollect();
//如果代码报错 curl_init undefined
//wampserver->php->php extensions->php_curl
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
//创建pdo对象
$pdo = new PDO('mysql:host=localhost;dbname=lamp;charset=utf8;port=3306','root','');
//发送预处理指令
$stmt = $pdo->prepare('insert into article (title, con, intro, time)values(:title, :con, :intro, :time)');
//参数的绑定
$arr = array(
':title'=>$temp[1],
':con'=>$temp[4],
':intro'=>$temp[3],
':time'=>$temp[2]
);
$stmt->execute($arr);
$id = $pdo->lastInsertId();
return $id;
}
/**
* 采集列表页 获取详情页的url
*/
public function getListUrl($url)
{
//获取当前列表页中的源代码
$data = Curl::get($url);
if(empty($data)){
return false;
}
//正则匹配
preg_match_all('/
/isU', $data, $temp);
//返回结果
return $temp[1];
}
/**
* 开始采集
*/
public function startCollect(){
$urls = $this->getListUrl('http://www.php1.cn/category/44.html');
//遍历
foreach ($urls as $key => $value) {
$this->getDetailPage($value);
}
}
}
/**
* curl工具类
*/
class Curl{
public static function get($url){
//初始化curl资源
$ch = curl_init($url);
//设置请求选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//发送请求
$res = curl_exec($ch);
//
return $res;
}
}
// $res = get('http://www.php1.cn/Content/XiaoXinGaoXiaoLvDe_sql_ChaXunTaYeHuiDaoZhiWangZhanXiangYingBianMan.html');
//创建对象
// $obj = new PHP1;
// $url = 'http://www.php1.cn/Content/XiaoXinGaoXiaoLvDe_sql_ChaXunTaYeHuiDaoZhiWangZhanXiangYingBianMan.html';
// $res = $obj->getDetailPage($url);
//读取列表页的内容
// $obj->getListUrl('http://www.php1.cn/category/44.html');
// $obj -> startCollect();
//如果代码报错 curl_init undefined
//wampserver->php->php extensions->php_curl
//返回结果
return $temp[1];
}
/**
* 开始采集
*/
public function startCollect(){
$urls = $this->getListUrl('http://www.php1.cn/category/44.html');
//遍历
foreach ($urls as $key => $value) {
$this->getDetailPage($value);
}
}
}
/**
* curl工具类
*/
class Curl{
public static function get($url){
//初始化curl资源
$ch = curl_init($url);
//设置请求选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//发送请求
$res = curl_exec($ch);
//
return $res;
}
}
// $res = get('http://www.php1.cn/Content/XiaoXinGaoXiaoLvDe_sql_ChaXunTaYeHuiDaoZhiWangZhanXiangYingBianMan.html');
//创建对象
// $obj = new PHP1;
// $url = 'http://www.php1.cn/Content/XiaoXinGaoXiaoLvDe_sql_ChaXunTaYeHuiDaoZhiWangZhanXiangYingBianMan.html';
// $res = $obj->getDetailPage($url);
//读取列表页的内容
// $obj->getListUrl('http://www.php1.cn/category/44.html');
// $obj -> startCollect();
//如果代码报错 curl_init undefined
//wampserver->php->php extensions->php_curl
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: php和editplus正则表达式去除空白行_PHP
下一篇: 二叉搜索树
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论