屏幕抓取php问题

时间:2011-04-01 12:02:16

标签: php screen-scraping

我制作了一个屏幕抓取模块,它工作得很好,但有一定的局限性。现在我想删除这些边界,但我有这么不可预测和不同的错误。在你想到任何事情之前,让我看看实际上是hapening。最初我使用屏幕抓取来检索一组关键字(搜索内容)谷歌的所有搜索引擎的结果,如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. 总结请求谷歌使用capcha。 要删除capcha我使用睡眠,或usleep()但它没有解决目的.atlast错误:连接重置。 我不能在usleep func中使用30秒或更长时间。我需要花费数小时才能检索信息。我的5个谷歌代码搜索数据,这意味着50个回复.Lib使用simple_html_dom.php
  3. 它适用于1页的页面,但不能超过3页。我应该怎么做/使用?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

你要使用的时间限制并不重要 - 它无法解决你的问题。您需要做的是使用他们的API,这与您看到的实际结果不一致,或者注册100个代理并以循环格式迭代它们。您只需100个代理即可轻松刮取Google 24/7,只需100美元。确保在每次请求后清除cookie,并设置一个好的用户代理(没有任何愚蠢的行为让Google认为你是一个糟糕的机器人)。

我宁愿这样做而不是支付他们的API,这会给你X量的电话并浪费你的钱。是的,我从技术上知道它违反了他们的服务条款,但看起来你正在做的事情是无害的。

答案 2 :(得分:0)

查询中带有sleep()

&num=100函数可以解决问题。使用& num = 100可减少google 10次请求的数量。在每次请求之间,我使用了5秒延迟谷歌似乎是一个有效的,真实的,人类的请求。

答案 3 :(得分:0)

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

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

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