daa/web-scraping-sdk

简化网页抓取的Composer包

v1.1 2014-12-21 23:28 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:28:37 UTC


README

这是一个Composer包,简化了网页内容的抓取,提供了一个轻量级且易于使用的代码库。

简单扩展提供的Scraper类并实现gather()方法,使用xpaths提取所需内容。然后可以将这些内容输出到文件、存储到数据库、返回json字符串等。

亮点

  • 基于XPath的内容提取
  • 只需实现一个方法
  • 允许轻松文件写入、数据库存储或格式化字符串/对象返回
  • PSR2编码标准
  • 使用cURL从指定源检索内容
  • 可配置失败尝试的重试次数和暂停时间
  • 轻松跟随链接以获取更多内容

Packagist链接:https://packagist.org.cn/packages/daa/web-scraping-sdk

使用方法

将以下要求添加到您的composer文件中,并执行composer install/update

  "require": {
        ...
        "daa/web-scraping-sdk: "1.*"
  },

编写自己的scraper类,该类扩展Scraper\Sdk\WebScraper并实现gather方法

namespace Your\Package\Scraper;

use Scraper\Sdk\WebScraper;

class YourScraper extends WebScraper 
{
    /**
     * {@inheritdoc}
     */
    protected function gather(\DOMXPath $dom)
    {
        $nodes = $dom->query(".//article[@class='product']");
        foreach ($nodes as $node) {
            ...
            // follow a url and extract more data
            $linkDom = $this->getLinkContent($node->getElementsByTagName('a')->item(0));
            $linkDom->query...

        }
    }
}

现在调用您的类,例如从由cron作业执行的脚本

require __DIR__.'/../vendor/autoload.php';

$scraper = new Your\Package\Scraper\YourScraper('http://www.someurl.com/with/content/');
$scraper->execute();

对于有问题的源,您可以指定重试配置(默认为3次重试,每次暂停3秒)

$scraper = new Your\Package\Scraper\YourScraper('http://www.someurl.com/with/content/', $retryAttempts, $pauseSeconds);
$scraper->execute();

您可以使用相同的实例抓取具有相同结构的多个url

$pages = array(
    'http://www.someurl.com/section-one/',
    'http://www.someurl.com/section-two/page1',
    'http://www.someurl.com/section-one/page2'
); 

$scraper = new Your\Package\Scraper\YourScraper();

foreach ($pages as $url) {
    $scraper->setSource($url);
    $scraper->execute();
}

查看示例文件夹以获取更多详细信息和工作示例。