php 网站爬虫入门 - Goutte

更新日期: 2018-01-24 阅读次数: 7394 分类: 爬虫

不使用 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。

相关文章

谈笑风生

Take

兄弟通风怎么样了?  有什么好药。

爱评论不评论

近期节日

2019年08月23日 处暑
2019年09月03日 抗日胜利纪念日
2019年09月08日 白露
2019年09月08日 国际扫盲日
2019年09月10日 教师节
2019年09月13日 中秋节
2019年09月16日 国际臭氧层保护日
2019年09月16日 世界清洁地球日
2019年09月18日 "九一八"事变纪念日
2019年09月20日 国际爱牙日
2019年09月21日 国际和平日
2019年09月22日 世界无车日
查看更多节日