【问题标题】:What PHP web crawler libraries are available?有哪些 PHP 网络爬虫库可用?
【发布时间】:2011-01-30 10:28:16
【问题描述】:

我正在寻找一些健壮的、有据可查的 PHP 网络爬虫脚本。也许是 Java 项目的 PHP 端口 - http://wiki.apache.org/nutch/NutchTutorial

我正在寻找免费和非免费版本。

【问题讨论】:

  • 没有爬虫会进行数据抓取,这是您必须自己编写的东西。还要确保你举的东西没有版权。
  • stackoverflow.com/search?q=web+crawler+php中的其他可能重复项
  • @Gordon - 抱歉,我不需要帮助来解析 html。
  • @Jason 如果您在解析 HTML 时不需要帮助,那么也许您应该澄清您的目标。爬取的 HTML 不会神奇地将自身转换为您认为重要的块。它必须被解析。请更新您的问题以指出您正在寻找的内容或至少您不想要的内容。此外,请浏览链接的搜索结果,看看它们是否包含有用的提示。如果您仍然有问题,请在您的问题中指出它们。换句话说:stackoverflow.com/questions/ask-advice

标签: php web-crawler


【解决方案1】:

试试Snoopy吧。

摘录:“Snoopy 是一个模拟 Web 浏览器的 PHP 类。它自动执行检索网页内容和发布表单等任务。”

【讨论】:

  • 对不起,我知道这是一篇旧帖子,但人们仍然阅读了这个答案,我投了反对票,因为史努比使用正则表达式解析 HTML 和 it's not cool...
【解决方案2】:

https://github.com/fabpot/Goutte也是一个很好的兼容psr-0标准的库。

【讨论】:

  • 自从这次合并 (github.com/FriendsOfPHP/Goutte/pull/397) Goutte 没有添加任何东西,除了来自 symfony 的Class Client extends HttpBrowser。那你就可以直接使用symfony HttpBrowser了。
【解决方案3】:

您可以使用 PHP Simple HTML DOM Parser 。非常简单实用。

【讨论】:

【解决方案4】:

在我发现phpQuery 之前,我已经使用 Simple HTML DOM 大约 3 年了。它速度更快,不递归工作(实际上可以转储它),并且完全支持 jQuery 选择器和方法。

【讨论】:

  • @Gordon 不,它们是 jQuery 选择器。来自 jQuery.com:“借用 CSS 1-3,然后添加自己的,jQuery 提供了一套强大的工具来匹配文档中的一组元素。”
  • 嗯,好的。它们在 CSS 选择器上扩展。我想那是一个有效的区别。对不起。当他们谈论 jQuery 选择器时,我很少看到人们使用 CSS 选择器集合之外的任何东西。它们听起来像是 jQuery 发明了它们。
  • @Gordon 是的,我也是“像我们发明它们一样”的部分:) sizzlejs.com 上的更多信息
【解决方案5】:

有一个很棒的教程here 结合了guzzlehttpsymfony/dom-crawler

如果链接丢失,这里是您可以使用的代码。

use Guzzle\Http\Client;
use Symfony\Component\DomCrawler\Crawler;
use RuntimeException;

// create http client instance
$client = new GuzzleHttp\ClientClient('http://download.cloud.com/releases');

// create a request
$response = $client->request('/3.0.6/api_3.0.6/TOC_Domain_Admin.html');

// get status code
$status = $response->getStatusCode();

// this is the response body from the requested page (usually html)
//$result = $response->getBody();

// crate crawler instance from body HTML code
$crawler = new Crawler($response->getBody(true));

// apply css selector filter
$filter = $crawler->filter('div.apismallbullet_box');
$result = array();

if (iterator_count($filter) > 1) {

    // iterate over filter results
    foreach ($filter as $i => $content) {

        // create crawler instance for result
        $cralwer = new Crawler($content);
        // extract the values needed
        $result[$i] = array(
            'topic' => $crawler->filter('h5')->text();
            'className' => trim(str_replace(' ', '', $result[$i]['topic'])) . 'Client'
        );
    }
} else {
    throw new RuntimeException('Got empty result processing the dataset!');
}

【讨论】:

    【解决方案6】:

    如果您正在考虑一个强大的基础组件,请尝试http://symfony.com/doc/2.0/components/dom_crawler.html

    真是太棒了,有css选择器之类的功能。

    【讨论】:

      【解决方案7】:

      我知道这是一个有点老的问题。从那时起,出现了很多有用的库。

      试一试Crawlzone。它是一个快速、有据可查的异步互联网爬取框架,具有许多强大的功能:

      • 具有可自定义并发性的异步抓取。
      • 根据您正在抓取的网站的负载自动限制抓取速度。
      • 如果配置,自动过滤掉 robots.txt 排除标准禁止的请求。
      • 简单的中间件系统允许您附加标头、提取数据、过滤或插入任何自定义功能来处理请求和响应。
      • 丰富的过滤功能。
      • 能够设置爬行深度
      • 通过使用事件挂钩到抓取过程,可以轻松扩展核心。
      • 随时关闭爬虫并重新开始而不丢失进度。

      还可以查看我写的关于它的文章:

      https://www.codementor.io/zstate/this-is-how-i-crawl-n98s6myxm

      【讨论】:

        【解决方案8】:

        没有人提到 wget 作为一个好的起点?

        wget -r --level=10 -nd http://www.mydomain.com/

        更多@http://www.erichynds.com/ubuntulinux/automatically-crawl-a-website-looking-for-errors/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 1970-01-01
          • 2011-06-26
          • 1970-01-01
          • 1970-01-01
          • 2011-06-07
          相关资源
          最近更新 更多