php 爬虫抓取网页数据(对PHP数据没有比较好的处理方案,你了解多少?)

优采云 发布时间: 2021-09-09 00:07

  php 爬虫抓取网页数据(对PHP数据没有比较好的处理方案,你了解多少?)

  很多爬虫都是用python写的。它的优点是可以简单的模仿各种请求,对文档解析有更好的支持。

  对于PHP来说,写爬虫有点麻烦,不过也有很多强大的第三方库来支持。

  比较知名的PHP爬虫框架

  phpspider

  git 地址

  文件地址

  优点是简单的配置可以直接运行,xPath选择器一般都能得到你想要的信息。支持多进程,使用redis支持断点采集。自动扫描列表页面匹配规则链接,更利于自动化。

  缺点是如果采集比较大网站,很容易被反爬虫机制识别,导致无法获取数据。 Ajax数据没有更好的解决方案,尤其是使用POST获取数据。

  总结:适合抓取静态页面,中小型网站无反爬虫机制。

  PHP 硒

  文件地址

  严格来说,这不是爬虫。 Selenium 是一个前端自动化测试框架。可以使用各种语言执行JS脚本来模拟用户访问界面。

  提交、验证、点击等操作事件,因为它模仿真实操作进行数据采集,可以很好的应对很多反爬虫机制,也是很多人比较喜欢的工具。

  优点是完美模仿用户行为,可以绕过一般的反爬虫机制。对数据源没有要求,只要是页面渲染的数据就可以获取。填写表格和验证注册相对简单。

  缺点是需要模拟浏览器,消耗资源过多。需要编写更多的模拟操作代码来模拟行为。如果操作过于频繁,也会触发网站的机器人验证。

  总结:适用于抓取少量数据,或者抓取跳转较深的页面数据。

  自己手动编写爬虫

  PHP不是特别适合做专业的爬虫工具,但是如果对以上两个都不满意,那就手动写一个简单的爬虫吧。优点是可以处理各种数据类型,可以抓取任何你想要抓取的页面的缺点当然很明显,自动化程度不是很高。

  第一步是选择自己喜欢的PHP框架,当然我们这里选择Laravel

  第二部分,安装两个必要的库

  Goutte 和 Guzzle

  composer require fabpot/goutte

composer require guzzlehttp/guzzle:~6.0

  Goutte git 地址

  Guzzle git 地址

  Guzzle 文档地址

  Guzzle 库是一个强大的 PHP HTTP 请求套件,可以模拟各种请求,如 GET、POST、PUT 等。页面,那就够了。

  基本使用方法如下

  use GuzzleHttp\Client;

use GuzzleHttp\Psr7\Request as GuzzleRequest;

public function index()

{

$url = "https://www.hao123.com/";

$request = new GuzzleRequest('GET', $url);

$response = $client->send($request, ['timeout' => 5]);

$content = $response->getBody()->getContents();

echo $content;

}

  其他高级用法请参考文档。

  Goutte 库实际上依赖于 Guzzle 和 DomCrawler

  原理是检索到的页面数据由DomCrawler处理,基础爬虫就是靠这个来获取数据的。

  use Goutte\Client as GoutteClient;

public function index()

{

$client = new GoutteClient();

$url = 'https://www.hao123.com/';

$crawler = $client->request('GET', $url);

//hao123 导航分类

$navs = $crawler->filter('#menus')->html();

echo $navs;

}

  此代码将返回带有 id 菜单的 html 结构。是的,它的过滤器选择器与 Jquery 相同。它可以支持嵌套和每个循环。有关详细信息,请参阅文档。我将发布另一个循环代码。

  public function index()

{

$client = new GoutteClient();

$url = 'https://www.hao123.com/';

$crawler = $client->request('GET', $url);

//hao123 导航分类

$navs = $crawler->filter('#menus li');

$navs->each(function ($node) {

echo $node->text().'

';

});

}

  您可以打印出导航下 li 标签中的每个选项。其他高级用法请参考文档。

  有了这两个函数,你就可以通过分析数据抓取的规律来编写自己的爬虫了。

  当然,这个Url需要注意,不能只填页面地址,所以可能什么也得不到。

  ajax数据需要打开开发者面板查看获取数据的实际url,直接获取结果。

  还有很多网站做了anti-curl获取源码,那我们就需要另辟蹊径,比如用wget命令将页面直接下载到本地,然后用DomCrawler截取数据。

  参考文章

  %E7%...

  博客:PHP爬虫爬取社区文章content

  goutteGuzzle

  本作品采用《CC协议》,转载需注明作者及本文链接

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线