PHP Magento屏幕刮痧

时间:2011-01-04 02:50:11

标签: php curl screen-scraping

我正在努力争取供应商magento网站,以节省一些时间,因为我需要收集大约2000个产品信息。我完全可以为任何东西编写屏幕刮刀,但我遇到了一个重大问题。我使用get_file_contentsto收集产品页面的html。

问题是:

您需要登录才能查看产品页面。它是一个标准的magento登录,所以我怎样才能在我的屏幕刮刀中绕过它?我不需要完整的脚本,只需要一个方法的建议。

2 个答案:

答案 0 :(得分:2)

使用stream_context_create,您可以指定在致电file_get_contents时发送的标头。

我建议的是,打开浏览器并登录该网站。打开Firebug(或您最喜欢的Cookie查看器)并抓取Cookie并将其与您的请求一起发送。

编辑:这是PHP.net的一个例子:

<?php
// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);
?>

编辑(2):这超出了您的问题的范围,但如果您想知道如何在之后抓取网站,您可以查看DOMDocument::loadHTML方法。这基本上会为您提供所需的功能(例如XPath querygetElementsByTagNamegetElementsById),以便为您提供所需的功能。

如果您想简单地处理一些事情,您还可以将RegEx与preg_match_all一起使用。

答案 1 :(得分:0)

如果您熟悉CURL,那么在一天左右的时间内应该相对简单。我创建了一些类似的应用程序来登录银行来检索数据 - 这当然也需要身份验证。

下面是一个链接,其中包含如何将CURL与Cookie一起用于身份验证的示例:

http://coderscult.com/php/php-curl/2008/05/20/php-curl-cookies-example/

如果您可以获取页面的输出,则可以使用正则表达式解析结果。或者,您可以使用像Snoopy这样的类来为您完成这项工作:

http://sourceforge.net/projects/snoopy/