Goutte
是一个简单的PHP爬虫库,功能非常强大。提供了一些非常好的的api去爬取网站,从HTML/XML
中提取数据。Github地址
使用示例
<?php
namespace app\controllers;
use Goutte\Client;
use GuzzleHttp\Client as GuzzleClient;
class SpiderController extends Controller
{
public $client;
public function __construct()
{
$this->client = new Client();
}
public function index()
{
$url = 'http://www.example.com';
$crawler = $this->client->request('GET',$url);
$crawler->filter('p')->count();//获取匹配的节点数量
$crawler->filter('p')->first();//匹配的第一个节点
$crawler->filter('p')->last();//匹配的最后一个节点
$crawler->filter('p')->eq(0);//匹配的第一个节点
$crawler->filter('p > a')->eq(0)->link()->getUri();//获取匹配的第一个节点的url
//遍历节点
$crawler->filter('p > a')->each(function ($node) {
print $node->text()."\n";//获取匹配节点的文本值,a标签中的文字
print $node->link()->getUri();//获取a标签的url
});
$article = $crawler->click($crawler->filter('p > a')->eq(0)->link()->getUri());//这是爬取某个链接点击过去之后的内容,返回的是一个crawler对象,所以上面的操作都可以在$article上使用
//表单登录
$crawler = $client->request('GET', 'https://github.com/login');
// 获取表单
$form = $crawler->selectButton('Sign in')->form();
$form['login'] = 'symfonyfan';//表单值
$form['password'] = 'anypass';//表单值
// 提交表单
$crawler = $client->submit($form);
}
}
还有很多强大的功能,具体参考文档。
部分功能文档可能也没有详细列出来,直接去看组件的源码Symfony\Component\DomCrawler
命名空间下的类Crawler
。