【问题标题】:screen scraping in php problemphp中的屏幕抓取问题
【发布时间】:2011-04-01 12:02:15
【问题描述】:

我做了一个屏幕抓取模块,它工作得很好,但有一定的限制。现在我想删除这些边界,但我得到了如此不可预测和不同的错误。在你想到任何事情之前,让我看看实际上是什么。最初,我使用屏幕抓取来检索一组关键字(搜索内容)谷歌的所有搜索引擎(如 co.in/co.uk/nl/de/com)的结果。

但现在我不得不在一个循环中抓取多个搜索引擎和多个关键字的逻辑。

让我们用一个例子来看看:

keyword     se            company         rank
telephony google.co.in    airtel          01
telephony google.co.in    bsnl            04
telephony google.co.in    aircel          06
telephony google.co.in    idea            03
mobile op google.co.uk    airtel          09
mobile op google.co.uk    bsnl            04

等等.. 超过 6 个关键字和所有显示的搜索引擎以及所有公司。

最初我为一个关键字、se 和所有公司检索它。但现在我必须列出所有关键字、se、公司。我只是使用循环来做到这一点。但我遇到了这些错误:

  1. 分配的内存 343322111 字节溢出(...[删除这个我使用了 ini_set('memory') func]
  2. 在求和请求后,谷歌使用了验证码。 要删除验证码,我使用了 sleep 或 usleep() 但它没有解决目的。atlast 错误:连接重置。 我不能在 usleep func 中使用 30 秒或更长时间。检索信息需要几个小时。我的代码搜索数据为 5 页谷歌,这意味着 50responses.Lib 使用simple_html_dom.php

它适用于 1 页页面,但不适用于超过 3 页。我应该做什么/使用?

【问题讨论】:

  • 您是否尝试将时间限制设置为 0 ? “设置时间限制(0);”。对于文档:php.net/manual/en/function.set-time-limit.php(我猜默认是 30 秒)
  • 是的,它被使用了。因为只有我能够在一页上执行它。因为可能存在带宽有限的情况。

标签: php screen-scraping


【解决方案1】:

Captcha 是 Google 用来表示他们发现您在商业上使用它的方式,并希望您从现在开始使用他们的付费服务http://code.google.com/intl/en/apis/customsearch/v1/overview.html

至于内存问题,如果没有一些代码概述,我们将无法为您提供帮助。 (但为了节省一些,至少要拆分关键字,而不是保留完整的页面或 DOM 解析树。)

【讨论】:

  • 怎么能在这里发送这么大的代码......内存不是问题......因为它是由ini_set()函数解决的。但现在问题是我如何告诉谷歌或如何在特定时间暂停代码执行并且连接也没有重置??
  • 如果您使用建议的 JSON API,您的连接不会被重置或停止。
  • 睡着了,但不知道发生了什么……我的代码没有完成。我遇到了两个问题。连接重置/或 capcha.wat 现在要做
  • 解决您的问题的方法是停止屏幕抓取,然后按照上面答案中的链接进行操作。
【解决方案2】:

你要使用什么时间限制并不重要 - 它不会解决你的问题。你需要做的是要么使用他们的 API,这与你看到的实际结果不一致,要么注册 100 个代理并以循环格式遍历它们。您可以使用 100 个左右的代理轻松 24/7 全天候抓取 Google,而且只需 100 美元。确保在每次请求后清除 cookie,并设置一个好的用户代理(没有什么愚蠢的东西会让谷歌认为你是一个坏机器人)。

我宁愿这样做,也不愿为他们的 API 付费,这会给你 X 数量的调用并浪费你的钱。是的,我知道从技术上讲这违反了他们的 TOS,但看起来你所做的似乎是无害的。

【讨论】:

    【解决方案3】:

    sleep() 函数和&num=100 在查询中解决了这个问题。使用 &num=100 减少了 10 次对 google 的请求数。在每个请求之间,我使用了 5 秒的延迟,谷歌似乎是一个有效的、真正的、人为的请求。

    【讨论】:

      【解决方案4】:

      不要选择前 5 页的 10 个结果,而是选择 1 页的 50 个结果!

      确保您使用典型的用户代理,以免您看起来像机器人。 为了让自己看起来不那么可疑,还可以偶尔使用 Google 的重定向 URL 跟踪一些结果链接,就像真正的用户一样。

      您也可以租用代理,但对于大多数情况,上述技术应该足够了。

      【讨论】:

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