前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >200行代码扒掉了一个素材网站所有数据,php是最好的语言,不假!

200行代码扒掉了一个素材网站所有数据,php是最好的语言,不假!

作者头像
程序猿的栖息地
发布2022-04-29 14:16:24
4550
发布2022-04-29 14:16:24
举报
文章被收录于专栏:程序猿的栖息地

作者:阿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 phpspider\core\phpspider;
use phpspider\core\requests;
use phpspider\core\db;

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条。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿的栖息地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档