2011-04-01 95 views
0

我做了一個屏幕抓取模塊,它工作得很好,但有一定的侷限性。現在我想刪除這些邊界,但我得到如此不可預知和不同的錯誤。在你腦子裏有什麼事情之前,讓我wat實際上是在發作。最初我使用屏幕抓取來檢索一組關鍵字(搜索內容)的搜索結果,谷歌的所有搜索引擎如co.in/co.uk/nl/de/com。在PHP問題屏幕抓取

但是現在我不得不在一個循環中搜刮多個搜索引擎和多個關鍵字的邏輯。

讓我們看看這個用一個例子:

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和所有company.reporting它現在我必須列出所有關鍵字,se,公司。簡單地我用循環做that.But我面臨這些錯誤:

  1. 存儲器分配343322111個字節溢出(... [移除此我使用的ini_set(「存儲器」)FUNC]
  2. 總和請求後谷歌使用capcha。 刪除capcha我使用sleep或usleep()但它不能解決purpose.atlast錯誤:連接重置 我無法在usleep中使用30sec或更長func.it需要幾小時才能恢復info.My代碼搜索數據爲5頁的谷歌,這意味着50 responses.Lib使用simple_html_dom.php

它工作正常1頁頁面但不超過3頁。我該怎麼做/使用?

+0

您是否嘗試將時間限制設置爲0? 「參數或者set_time_limit(0);」。對於文檔:http://php.net/manual/en/function.set-time-limit.php(默認是30秒,我猜) – frail 2011-04-01 12:09:16

+0

是的,它被使用。因爲只有我能夠執行一個頁面。因爲可能會出現帶寬有限的情況。 – 2011-04-01 12:11:26

回答

0

sleep()功能與&num=100查詢解決問題。使用& num = 100可減少向Google 10次請求的次數。並在每次請求之間使用5秒的延遲,這似乎是一個有效的,真實的,人性化的請求。

2

的驗證碼是谷歌的方式來表達你自己發現你使用它商業化,並希望您在http://code.google.com/intl/en/apis/customsearch/v1/overview.html

使用他們的付費服務從現在至於內存問題,我們不能幫你沒有一些代碼概述。 (但爲了節省一些,至少分割出關鍵字而不是保留完整的頁面或DOM解析樹。)

+0

如何在這裏發現這樣一個大代碼......內存不是問題,因爲它是通過ini_set()func解決的。但現在問題是我怎麼能告訴谷歌或如何暫停代碼excution特定的時間和連接也沒有得到重置? – 2011-04-01 12:17:25

+0

如果您使用建議的JSON API,則您的連接不會重置或停止。 – mario 2011-04-01 12:18:46

+0

usleep工作,但不知道wats happenign ...我的代碼不complete.i有兩個問題。連接重置/或capcha.wat現在做 – 2011-04-01 12:19:04

0

無論您要使用什麼時間限制 - 它都不會解決您的問題。你需要做的是使用他們的API,這與你看到的真實結果不一致,或者註冊100個代理,並以循環方式遍歷它們。你可以很容易地用100代理左右Google 24/7,而它只需要100美元。確保您在每次請求後清除cookie,並設置好用戶代理(沒有什麼愚蠢的做法讓Google認爲您是一個糟糕的機器人)。

我寧願這樣做,而不是支付他們的API,它會給你X次的通話量和浪費你的錢。是的,我知道這在技術上違背了他們的服務條款,但看起來你正在做的是無害的。

0

而不是選擇10個結果的前5頁選擇1頁的50結果!

確保您使用典型的用戶代理,因此您看起來不像機器人。 爲了讓自己看起來不那麼可疑,也可以使用Google的重定向網址偶爾遵循一些結果鏈接,就像真實用戶一樣。

您也可以租用代理服務器,但上述技術應該足以滿足大多數情況。