作者:阿dai哥
教程分享
TUTORIAL TO SHARE
我只用了不到200行代码,把一个素材网站的整个数据库扒了下来。
这是我用php语言写的第一个爬虫脚本,使用了一个相对来说比较常用的一个php爬虫框架,【phpspider】
爬虫框架,特别是对与新手来说很简单入手,使用手册百度一大堆,但是百度上很多都是坑。欢迎进群学习交流:876480216(QQ群)
分享效果说明
SHARE THE BODY
这个素材的网站效果图大概是这样的(由于其它问题就不公布网址)
实现代码
THE IMPLEMENTATION CODE
由于我使用的是phpspider爬虫框架,直接百度就可以拿到这个框架的底层。废话上说直接上代码吧,如需完整代码请公众号回复关键词:phpspider 即可获取
1.先引入相关的文件
代码语言:javascript复制require_once __DIR__ . '/../autoloader.php';
use phpspidercorephpspider;
use phpspidercorerequests;
use phpspidercoredb;
2.建一个配置数组
代码语言:javascript复制$configs = array(
'name' => '扒静态网页模板数据',
'log_show' => true,
'tasknum' => 1,
//'save_running_state' => true,
'domains' => array(
'ceshi.com',
'www.ceshi.com'
),
'scan_urls' => array(
'http://www.ceshi.com/'
),
'list_url_regexes' => array(
"http://www.ceshi.com/index.php?m=Home&c=Article&a=search&type=cateinside&key=3&p=d "
),
'content_url_regexes' => array(
"http://www.templatesy.com/Article/d "
),
// 'max_fields' => 5,
'max_try' => 20, //爬虫爬取每个网页失败后尝试次数 网络不好可能导致爬虫在超时时间内抓取失败, 可以设置此项允许爬虫重复爬取
'export' => array(
'type' => 'db',
'table'=> 'jk_templets2', //表名
),
'db_config' => array(
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root', //mysql的账号
'pass' => 'root', //mysql的密码
'name' => 'gx', //数据库库名
),
'fields' => array(
array(
'name' => "title",
'selector' => '//*[@id="main-container"]/div/div/div[1]/article/div[1]/div[1]/span',
'required' => true,
),
array(
'name' => "type",
'selector' => '//*[@id="main-container"]/div/div/div[1]/article/div[1]/div[2]/p/a',
'required' => true,
),
array(
'name' => 'create_at',
'selector' => '//*[@id="main-container"]/div/div/div[1]/article/div[1]/div[2]/p/span[5]',
'required' => true,
),
array(
'name' => 'browse',
'selector' => '//*[@id="main-container"]/div/div/div[1]/article/div[1]/div[2]/p/span[9]/span',
'required' => true,
),
array(
'name' => 'descs',
'selector' => '//*[@id="main-container"]/div/div/div[2]/div[1]/p',
'required' => true,
),
array(
'name' => 'contents',
'selector' => '//*[@id="main-container"]/div/div/div[1]/article/div[2]',
'required' => true,
),
array(
'name' => 'tags',
'selector' => '//*[@id="main-container"]/div/div/div[2]/div[2]/p',
'required' => true,
),
array(
'name' => 'download',
'selector' => '//*[@id="main-container"]/div/div/div[1]/article/div[1]/div[2]/p/span[8]/span',
),
),
// 随机浏览器类型,用于破解防采集
'user_agent' => array(
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1",
"Mozilla/5.0 (Linux; U; Android 6.0.1;zh_cn; Le X820 Build/FEXCNFN5801507014S) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/49.0.0.0 Mobile Safari/537.36 EUI Browser/5.8.015S",
),
//爬虫爬取网页所使用的伪IP。随机伪造IP,用于破解防采集
'client_ip' => array(
'192.168.0.1',
),
关键参数说明:
(1)name:当前爬虫的名称
(2)domains:你的目标爬虫,只要提供对应的链接即可
(3)list_url_regexes:待扒取的列表,把对应的变量使用正则匹配替换
(4)content_url_regexes:待扒取的详情页,把对应的变量使用正则匹配替换
(5)max_try:爬虫爬取每个网页失败后尝试次数 网络不好可能导致爬虫在超时时间内抓取失败, 可以设置此项允许爬虫重复爬取
(6)fields:你要的数据(使用了Xpath 定位数据插件)
(7)user_agent:随机浏览器类型,用于破解防采集
(8)client_ip:爬虫爬取网页所使用的伪IP。随机伪造IP,用于破解防采集
更多参数说明请看:百度phpspider一大堆。
3、然后实例化这个
代码语言:javascript复制$spider = new phpspider($configs);
4、链接数据库操作,首先是要先建立一个数据表,下面就是我建的表很简单
代码语言:javascript复制$spider->on_start = function($phpspider)
{
$db_config = $phpspider->get_config("db_config");
// 数据库连接
db::set_connect('default', $db_config);
db::_init();
};
3、入库前数据处理操作,看自己的需求相应的做数据处理,每个人要扒的数据都不一样,自己看着办吧!
代码语言:javascript复制$spider->on_extract_page = function($page,$data){
//把日期转为时间戳,注意:先付给一个变量,然后使用strtotime 否则会报错 至于为什么我也不清楚
$create_at = $data['create_at'];
$create_at = strtotime($create_at);
$data['create_at'] = $create_at;
//下载次数
if($data['download'] == ''){
$data['download'] = 0;
}
//判断分类
$type = $data['type'];
if($type == '企业网站'){
$data['type'] = 1;
} elseif($type == '博客网站'){
$data['type'] = 2;
} elseif($type == '后台网站'){
$data['type'] = 3;
} elseif($type == 'Wap网站'){
$data['type'] = 4;
} elseif($type == '商务网站'){
$data['type'] = 5;
} elseif($type == 'H5游戏'){
$data['type'] = 6;
} elseif($type == '插件'){
$data['type'] = 7;
} elseif($type == '其他'){
$data['type'] = 8;
} else{
$data['type'] = 0;
}
//标签
$tag_value = $data['tags'];
$tags = preg_replace('/<.*?>/', ',', $tag_value); //去掉a标签
$tags = trim($tags); //去掉左右空格
$tags = str_replace(',,', ',', $tags); //把',,'换成','
$tags = trim($tags, ','); //去掉左右的','
$data['tags'] = $tags;
//转成数组,查询数据库标签对呀的id替换掉
return $data;
};
3、最后就是执行这个方法
代码语言:javascript复制$spider->start();
爬虫代码到这里就已全部写完了,接下来是测试能不能扒到数据。
执行的方法是在命令行操作,直接网页打开是执行不到效果的,接下来我们一起看看能不能执行成功。
先进到你脚本的位置,如我的:
我的文件名是:muban.php
直接执行: php muban.php,就会出现下面的画面
等待2秒钟左右就会出现如下的数据,数据不断的循环出来,这就是你爬虫起了作用,正在爬取数据进入数据库,不是有所的数据都成功的。
等待系统停止。
我大概过了5分钟左右爬虫就停止了,具体的时间要看目标网站的数据有多大。
我看了一下我的数据库的数据,成功爬到的数据有719条。