需求来源,需要用PHP解析HTML提取我想要的数据
用PHP写网站爬虫的时候,需要把爬取的网页进行解析,提取里面想要的数据,这个过程叫做网页HTML中数据结构化。
很多人应该知道用phpQuery像JQuery一样的语法进行网页处理,抽取想要的数据。
但是在复杂一些的场景phpQuery并不能很好的完成工作,说简单点就是复杂场景不好用。
有没有更好的方式呢,我们看看商业爬虫软件是怎么做的。
他山之石,商业爬虫怎么做的
市面上商业爬虫怎么做HTML解析抽取数据的
看看市面上商业爬虫怎么做HTML解析结构化数据字段抽取
通过观察市面上商业爬虫工具GooSeeker、神箭手、八爪鱼,可以知道他们都用一个叫做XPath表达式的方式提取需要的字段数据。
那么可以判断使用XPath对HTML解析进行数据定位提取就是通行最佳的方式之一。
PHP中的XPath支持
XPath表达式可以查找HTML节点或元素,是一种路径表达语言。
那么需要先学习下XPath的基础,花个1-2小时入门,XPath就是页面数据提取能力的最佳内功之一,这个时间值得花。
既然用XPath提取页面数据是通行的方式,那么PHP中支持XPath的扩展包是什么呢?
为了帮大家节约时间,Symfony DomCrawler 就是PHP中最佳XPath包之一,直接用他吧,Symfony出品质量可是有目共睹,PHP热门框架laravel都用Symfony的包。
Symfony DomCrawler官方文档介绍的实例有限,建议有需要的情况下把代码读下,更能熟知新用法。
撸起袖子干,用DomCrawler做XPath HTML页面解析结构化数据抽取
基本思路
在Chrome浏览器中安装”XPath Helper”插件(XPath Helper怎么使用见参考资料)
打开需要解析的网站页面编写和测试XPath表达式
在PHP代码用DomCrawler使用上XPath表达式抽取想要的字段数据
实例演示
解析《神偷奶爸3》页面的的电影介绍信息
在Chrome中用编写测试XPath表达式
xpath helper使用
在项目下用composer安装guzzlehttp/guzzle(http client)、symfony/dom-crawler(Symfony DomCrawler)
composer require guzzlehttp/guzzle
composer require symfony/dom-crawler
下面直接上代码,在代码中用注释做说明
php Douban.php
/**
* Created by PhpStorm.
* User: wwek
* Date: 2017/7/9
* Time: 21:41
*/
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
use Symfony\Component\DomCrawler\Crawler;
print_r(json_encode(Spider(), JSON_UNESCAPED_UNICODE));
//print_r(Spider());
function Spider()
{
//需要爬取的页面
$url = 'https://movie.douban.com/subject/25812712/?from=showing';
//下载网页内容
$client = new Client([
'timeout' => 10