【问题标题】:PHP Magento Screen ScrapingPHP Magento 屏幕抓取
【发布时间】:2011-06-03 04:18:54
【问题描述】:

我正在尝试抓取供应商 magento 网站以节省一些时间,因为我需要收集大约 2000 种产品的信息。我完全可以为几乎任何东西编写屏幕刮板,但我遇到了一个大问题。我使用 get_file_contents 来收集产品页面的 html。

问题是:

您需要登录才能查看产品页面。它是一个标准的 magento 登录,那么我怎样才能在我的屏幕刮板中解决这个问题呢?我不需要完整的脚本,只需要方法上的建议。

【问题讨论】:

  • 这是非法的。请他们以任何适当的格式向您发送价目表。
  • 这并不违法。完全取决于来源和您获得的法定许可,包括任何使用条款、t+c 或内容创建者的明确许可。屏幕抓取将是自动化产品更新的一种方式。还是谢谢。
  • 您能给我们网站的网址,以便我们查看允许屏幕抓取的 TOS 吗?
  • 他不需要向您展示网站或服务条款。不管他是否被允许抓取网站,他的问题都是合法的。他想知道如何使用file_get_contents 方法发送cookie。编辑:另外,如果他还不知道登录是如何工作的,他将学习一些关于标头和 cookie 的知识。

标签: php curl screen-scraping


【解决方案1】:

使用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

【讨论】:

  • 非常有用,谢谢。我正在使用 preg_match 来解析页面,这就是我所需要的。你的明星!
  • 我只是想,我还没有仔细研究登录是如何工作的,但是如果登录是使用会话变量注册的呢?
  • 如果 Magento 使用会话,会话 id(在大多数情况下)将存储在 cookie PHPSESSID 中。所以基本上你所要做的就是输入'header' =&gt; "Cookie: PHPSESSID=...\r\n"它应该让你登录。记住会话可能会过期,所以如果你长时间抓取,你最终可能需要更新cookie。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多