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);
		}
}

还有很多强大的功能,具体参考文档。

DomCrawler Component

部分功能文档可能也没有详细列出来,直接去看组件的源码Symfony\Component\DomCrawler命名空间下的类Crawler