我正在努力争取供应商magento网站,以节省一些时间,因为我需要收集大约2000个产品信息。我完全可以为任何东西编写屏幕刮刀,但我遇到了一个重大问题。我使用get_file_contentsto收集产品页面的html。
问题是:
您需要登录才能查看产品页面。它是一个标准的magento登录,所以我怎样才能在我的屏幕刮刀中绕过它?我不需要完整的脚本,只需要一个方法的建议。
答案 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 query,getElementsByTagName,getElementsById),以便为您提供所需的功能。
如果您想简单地处理一些事情,您还可以将RegEx与preg_match_all一起使用。
答案 1 :(得分:0)
如果您熟悉CURL,那么在一天左右的时间内应该相对简单。我创建了一些类似的应用程序来登录银行来检索数据 - 这当然也需要身份验证。
下面是一个链接,其中包含如何将CURL与Cookie一起用于身份验证的示例:
http://coderscult.com/php/php-curl/2008/05/20/php-curl-cookies-example/
如果您可以获取页面的输出,则可以使用正则表达式解析结果。或者,您可以使用像Snoopy这样的类来为您完成这项工作: