PHP可以灵活配置使用的采集器?就跟随本站小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网!
代码:
<?php
/**
* 可以灵活配置使用的采集器
* 作者:Rain
* 创建时间:2015-02-03 15:17:30
* 版本信息:V1.0
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//数据库的相关配置信息,请根据您的数据库信息进行配置
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PWD', 'test123456');
define('DB_NAME', 'test_dbname');
define('DB_CHARSET', 'utf8');
define('TABLE_NAME', 'tb_book');
//end
//网站信息相关的配置,请根据具体需要采集的网站内容信息进行配置
define('WEB_CHARSET', 'gbk');
//变动的参数,使用%d进行替换,只支持数值形式的变动
define('WEB_LIST_URL', '_%');
//分页的条数
define('PAGE_COUNT', 14);
//从哪个页面开始抓取
define('PAGE_START', 1);
//内容页的URL,使用正则模式,必须包含/,例如://xuefu2008/article/details/(d)+/i
define('WEB_CONTENT_URL_REG', '//book/(d)+');
//网站域名HOST信息,不包含末尾的/,例如:
define('WEB_HOST', '');
//列表页内容的精准定位,用来大致抓取一个列表页的内容显示模块位置,使用正则进行定位
define('WEB_LIST_POSTION', '/book_name.gif(.*?)<tdswidth="15%"snowrap>/i');
//end
//微调参数,通常不修改也不会影响您的正常使用
define('SLEEP_TIME', 1);
define('IS_DEBUG', false);
define('INSERT_DB', true);
//内容的输出速度,单位:秒
define('OUTPUT_SPEED', 1);
//end
//需要过滤删除的文字,根据采集的网站类型进行设置,不区分大小写
$text_filter = array(
'- 中华电脑书库' => '',
'_电脑电子书' => '',
'_电脑书籍' => '',
'下载' => '',
);
//表结构映射的配置
$table_mapping = array(
//表字段名称 => 获取该字段的正则表达式,非空字段都必须在此设置映射关系,常量值请直接填写具体对应的值,无需使用正则
'size' => '/软件大小.*?000000>(.*?)</font>/i',
'logo' => 'http://www.94cto.com/index/uploads/images/20150105/0b8461910de101cc51a07684cdab797e.jpg',
'field1' => '/<title>(.*?)</title>/i',
'field2' => '/软件简介.*?000000>(.*?)</font>/i',
'field3' => '1',
'field4' => '1',
'field5' => '1',
'field6' => '电子书,计算机,图像,图形',
'platform' => 'window/Linux',
'ishot' => '1',
'agreement' => '免费',
'downurl' => '/(/down?id=.*?)"/i',
'istop' => '1',
);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$ga = new Gather();
$ga->run();
class Gather
{
public function __construct()
{
$this->init_check();
}
public function run()
{
global $table_mapping, $text_filter;
for ($page = PAGE_START; $page <= PAGE_COUNT; $page++)
{
$this->write('开始采集列表第'.$page.'页的内容...');
$list_content = $this->get(sprintf(WEB_LIST_URL, $page));
if (empty($list_content))
{
$this->write('抓取的列表页的内容为空,所以过滤掉');
continue;
}
$list_content = str_replace("r", '', $list_content);
$list_content = str_replace("n", '', $list_content);
//精准定位要抓取的模块内容
if (!preg_match(WEB_LIST_POSTION, $list_content, $list_search))
{
$this->write('精准匹配列表页的内容失败,所以过滤掉');
continue;
}
if (isset($list_search[1]))
$list_content = $list_search[1];
else
$list_content = $list_search[0];
//end
preg_match_all(WEB_CONTENT_URL_REG, $list_content, $match);
if (is_array($match[0]) && !empty($match[0]))
{
$this->write('当前的'列表页面,总共匹配到:'t($match[0]).'个内容页');
foreach ($match[0] as $val)
{