php 网站爬虫入门 - Goutte

文章目录

    不使用 python scrapy 的原因

    虽然我用 python 写爬虫已有多年,但是我越来越想尝试一下用 PHP 来写个爬虫

    • 厌恶了 python 的包管理
    • scrapy 对于小爬虫来说太繁琐了
    • python 的 ORM 相对 PHP laravel 的 eloquent 都像是半成品

    当然 scrapy 也有不可替代的功能

    • 调试 console,这个无人可替代。chrome console XPath?

    PHP 的爬虫库

    https://github.com/BruceDone/awesome-crawler

    Goutte 看上去不错,但是活跃度太低,一年也没几次提交。

    不过,他的主要功能是基于 BrowserKit 和 DomCrawler 这两个库实现的。这两个库还算活跃。

    Goutte 的娱乐小八卦

    • goutte - 痛风
    • guzzle - 狂饮 (guzzle 是 PHP 的一个 HTTP 库)

    狂饮导致痛风。。。醉了。goutte 这个名字起得真是太潇洒了。。。

    使用 Goutte 爬取大象笔记的标题

    composer require fabpot/goutte
    

    安装好 goutte 之后,编写逻辑代码

    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    use Goutte\Client;
    
    $client = new Client();
    $crawler = $client->request('GET', 'https://www.sunzhongwei.com');
    $crawler->filter('h1')->each(function ($node) {
            print $node->text()."\n";
    });
    

    运行结果

    % php go.php
    大象笔记
    

    Goutte 默认的请求头

    “GET / HTTP/1.1” 200 34881 “-” “Symfony BrowserKit”

    更复杂一点的爬虫

    例如,爬取搜索引擎的搜索结果。

    真实感受是,PHP 做起来太痛苦了。举个例子

    • 当对象属性未知时,远不如 python 的 dir 好用
    • 爬取结果去重,python set 一行搞定,这 php …

    试了一把,我还是决定使用 python requests + beautifulsoup。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式