2016-07-27 64 views
0

我一直在學習很多python最近在工作的一些項目上工作。谷歌搜索使用Python刮網

目前我需要做一些網頁搜刮谷歌搜索結果。我發現幾個網站演示瞭如何使用ajax google api進行搜索,但是在嘗試使用它後,它似乎不再受支持。有什麼建議麼?

我一直在尋找相當長的一段時間找到一種方式,但似乎無法找到任何解決方案,目前的工作。

+0

您可以在沒有API的情況下使用Google進行搜索,但如果他們懷疑您是機器人,您可能會被Google禁止。閱讀TOS,您可能需要付費才能以任何重要方式使用他們的API。 – Ares

+0

我研究瞭如何在沒有API的情況下做到這一點,我不得不改變我的頭/用戶代理信息。但即使我這樣做,我仍然無法獲得結果。如果可以的話,我會在每個請求之間放置一個睡眠定時器,以免被視爲bot。 – pbell

+0

我已經寫了一個谷歌搜索機器人,它工作的很好,但由於使用機器人直接違反谷歌的ToS,我不會發布它。無論你想要做什麼,也許都要通過官方的API。 – Ares

回答

2

您可以隨時直接刮取Google結果。爲此,您可以使用網址https://google.com/search?q=<Query>這將返回前10個搜索結果。

然後,您可以使用lxml來解析頁面。根據您使用的東西,你可以通過CSS選擇器(.r a)或使用XPath的選擇器(//h3[@class="r"]/a

在某些情況下所產生的URL重定向到谷歌查詢結果節點樹。通常它包含一個查詢參數q,它將包含實際的請求URL。使用LXML和

示例代碼請求

from urllib.parse import urlencode, urlparse, parse_qs 

from lxml.html import fromstring 
from requests import get 

raw = get("https://www.google.com/search?q=StackOverflow").text 
page = fromstring(raw) 

for result in pg.cssselect(".r a"): 
    url = result.get("href") 
    if url.startswith("/url?"): 
     url = parse_qs(urlparse(url).query)['q'] 
    print(url[0]) 

在谷歌禁止你的IP的說明:根據我的經驗,谷歌只有當你開始搜索請求發送垃圾郵件谷歌禁止。如果谷歌認爲你是機器人,它將以503迴應。

+0

謝謝,我能夠得到與此類似的工作。 – pbell

+0

截至今天,這不適合我。當我查看Google搜索結果頁面的源代碼和DOM結構時,看起來好像是以JavaScript加載和呈現結果,這會阻止這種天真的刮擦。這是否適用於其他人? –

+1

@Lane Rettig工作正常。 –