php语言 百分网手机站

PHP可以灵活配置使用的采集器

时间:2020-08-06 10:44:01 php语言 我要投稿

PHP可以灵活配置使用的采集器

  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', 'http://www.pcbookcn.com/book/1_%d.htm');

  //分页的条数

  define('PAGE_COUNT', 14);

  //从哪个页面开始抓取

  define('PAGE_START', 1);

  //内容页的URL,使用正则模式,必须包含/,例如:/\/xuefu2008\/article\/details\/(\d)+/i

  define('WEB_CONTENT_URL_REG', '/\/book\/(\d)+\.htm/i');

  //网站域名HOST信息,不包含末尾的/,例如:http://blog.csdn.net

  define('WEB_HOST', 'http://www.pcbookcn.com');

  //列表页内容的精准定位,用来大致抓取一个列表页的内容显示模块位置,使用正则进行定位

  define('WEB_LIST_POSTION', '/book_name\.gif(.*?)<td\swidth="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\.asp\?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('当前的列表页面,总共匹配到:'.count($match[0]).'个内容页');

  foreach ($match[0] as $val)

  {