自制爬虫框架-Pider框架快速开始

7 篇文章 0 订阅
7 篇文章 0 订阅

快速使用

项目的基本结构

//项目根目录
|-- Config  //配置文件
|-- LICENSE
|-- README.md
|-- composer.json
|-- composer.lock
|-- examples //示例
|-- install.sh //安装脚本
|-- pider -> src/bin/pider //爬虫管理命令工具
|-- piderd -> src/bin/piderd //爬虫分布式管理工具
|-- src  //源码

运行

爬虫
./pider  spidername.php(你创建的爬虫实例)

数据处理
./pider --digest digestname.php(你创建的数据处理实例)

示例
  • 创建实例
mkdir spiders //创建爬虫文件夹,里面放置你写的爬虫实例
mkdir digests //创建数据处理文件夹,里面放置你写的数据处理实例
touch spiders/TestSpider.php
touch digests/TestDigest.php
  • 编写实例
//TestSpider.php
<?php
use Pider\Spider;
use Pider\Http\Response;
class TestSpider extends Spider {
     protected $start_urls = ['https://item.jd.com/1304924.html'];
     protected $domain     = ['www.jd.com'];

     public function parse(Response $response) {
          echo "Hello Pider!".PHP_EOL;
    }
}
//TestDigest.php
<?php
use Pider\Digest;
class TestDigest extends Digest {
     protected $start_urls = ['https://item.jd.com/1304924.html'];
     protected $domain     = ['www.jd.com'];

     public function process(Response $response) {
          echo "Hello Digest!".PHP_EOL;
    }
}
  • 运行实例
./pider spiders/TestSpider.php
./pider digests/TestDigest.php

注意:

定义的实例类名必须和文件名一致

基本用法

     爬虫中最常见的场景就是,请求一个 html 页面,或者返回 json/xml 格式的接口, 然后处理响应文本。

use Pider\Spider;
use Pider\Http\Response;
class BasicSpider extends Spider {
     protected $start_urls = ['https://item.jd.com/1304924.html'];
     protected $domain     = ['www.jd.com'];

     public function parse(Response $response) {
      //获取商品名称
      $name = $response->xpath('//div[contains(@class,"itemInfo-wrap")]/div[contains(@class,"sku-name")]/text()')->extract(); 
      //打印商品名称
      var_dump($name);
     }
}

Note: 该例子中的 parse() 方法是用来解析响应请求, $start_urls 是用来设定请求的 urls 。你也可以通过 start_requests() 来设定请求的 urls 。但是需要注意的是, start_requests()$start_urls 两种方法只能单独使用。

响应处理

     爬虫的目的是从抓取到的 html 或者 json/xml 页面中分析到有用的信息。 Pider 提供了方便 的 回调机制 来从响应中提取有用的信息。默认的回调函数为 parse() (在未给指定的 Request 指定回调函数的情况下)。~Pider~ 也允许在 创建 Request 对象的时候,自定义回调函数。如下:

use Pider\Spider;
use Pider\Http\Response;
use Pider\Http\Request;

class CustomizedCallbackSpider extends Spider {

     protected $start_urls = ['https://item.jd.com/1304924.html'];
     protected $domain     = ['www.jd.com'];

     public function parse(Response $response) {
      //获取商品名称
      $name = $response->xpath('//div[contains(@class,"itemInfo-wrap")]/div[contains(@class,"sku-name")]/text()')->extract(); 
      //打印商品名称
      var_dump($name);
      //发起新的请求
      return (new Request(['base_uri'=>'https://item.jd.com/1304924.html',[$this,'']]));
     }

     public function parse2(Response $response) {
     //自定义回调
     echo "Customized callback".PHP_EOL;
     }
}

多进程

     对于爬虫程序来说,大多数的时间都耗费在网络请求上面。当我们需要爬取大量的页面的时候,我们就不得不 考虑爬虫性能的问题, Pider 框架支持多进程爬虫,利用计算机的多核CPU,来提升大量爬取时候的爬虫性能。

use Pider\Spider;
use Pider\Http\Response;
class MultiSpider extends Spider {
    protected $domains = [ 'www.jd.com' ];
    protected $processes = 4;
    protected $start_urls = [
    'https://item.jd.com/1378700118.html',
    'https://item.jd.com/302813.html',
    'https://item.jd.com/1304924.html',
    'https://item.jd.com/2286746.html'
    ];
    protected $count = 1;
    public function parse(Response $response) {
       //获取商品名称
      $name = $response->xpath('//div[contains(@class,"itemInfo-wrap")]/div[contains(@class,"sku-name")]/text()')->extract(); 
      var_dump($name);
      $this->count++;
    }
}

如果你对本项目感兴趣, 或者觉得对你有用,可以在给项目一个star或者watch, 项目地址:https://github.com/duanqiaobb/pider

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值