首頁 後端開發 Python教學 python抓取google搜尋結果

python抓取google搜尋結果

Oct 18, 2016 am 10:46 AM

前一段時間一直在研究如何用python抓取搜尋引擎結果,在實現的過程中遇到了很多的問題,我把我遇到的問題都記錄下來,希望以後遇到同樣問題的童鞋不要再走彎路。

1. 搜尋引擎的選取

  選擇一個好的搜尋引擎意味著你能夠得到更精確的搜尋結果。我用過的搜尋引擎有四種:Google、Bing、Baidu、Yahoo!。 身為程式設計師,我首選Google。但當我看見我最愛的Google回傳給我的全是一堆的js程式碼,根本沒我想要的搜尋結果。於是我轉而投向了Bing的陣營,在用過一段時間後我發現Bing回傳的搜尋結果對於我的問題來說不太理想。正當我要絕望時,Google拯救了我。原來Google為了照顧那些禁止瀏覽器使用js的用戶,還有另一種搜尋方式,請看下面的搜尋URL:

https://www.google.com.hk/search?hl=en&q=hello

  hl指定要搜尋的語言,q就是你要搜尋的關鍵字。 好了,感謝Google,搜尋結果頁麵包含我要抓取的內容。

  PS: 網路上很多利用python抓取Google搜尋結果還是利用 https://ajax.googleapis.com/ajax/services/search/web... 的方法。要注意的是這個方法Google已經不再建議使用了,請參閱 https://developers.google.com/web-search/docs/ 。 Google現在提供了Custom Search API, 不過API限制每天100次請求,如果需要更多就只能花錢買。

2. Python抓取並分析網頁

  利用Python抓取網頁很方便,不多說,見程式碼:

def search(self, queryStr):
     queryStr = urllib2.quote(queryStr)
     url = 'https://www.google.com.hk/search?hl=en&q=%s' % queryStr
     request = urllib2.Request(url)
     response = urllib2.urlopen(request)
     html = response.read()
     results = self.extractSearchResults(html)
登入後複製

  第6行的 html 就是我們抓取的搜尋結果頁面來源碼。使用過Python的同學會發現,Python同時提供了urllib 和urllib2兩個模組,都是和URL請求相關的模組,不過提供了不同的功能,urllib只可以接收URL,而urllib2可以接受一個Request類別的實例來設定URL請求的headers,這表示你可以偽裝你的user agent 等(下面會用到)。

  現在我們已經可以用Python抓取網頁並保存下來,接下來我們就可以從源碼頁面中抽取我們想要的搜尋結果。 Python提供了htmlparser模組,不過用起來相對比較麻煩,這裡推薦一個很好用的網頁分析套件BeautifulSoup,關於BeautifulSoup的用法官網有詳細的介紹,這裡我不再多說。

  利用上面的程式碼,對於少量的查詢還比較OK,但如果要進行上千上萬次的查詢,上面的方法就不再有效了, Google會檢測你請求的來源,如果我們利用機器頻繁爬取Google的搜尋結果,不多久就Google會block你的IP,並給你回503 Error頁面。這不是我們想要的結果,於是我們還要繼續探索

  前面提到利用urllib2我們可以設定URL請求的headers,  偽裝我們的user agent。簡單的說,user agent就是客戶端瀏覽器等應用程式使用的一種特殊的網路協議, 在每次瀏覽器(郵件客戶端/搜尋引擎蜘蛛)進行HTTP 請求時發送到伺服器,伺服器就知道了用戶是使用什麼瀏覽器(郵件用戶端/搜尋引擎蜘蛛)來存取的。 有時候為了達到一些目的,我們不得不去善意的欺騙伺服器告訴它我不是用機器訪問你。

  於是,我們的程式碼就成了下面這個樣子:

user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \
         'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \
         'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ \
         (KHTML, like Gecko) Element Browser 5.0', \
         'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \
         'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \
         'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \
         'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) \
         Version/6.0 Mobile/10A5355d Safari/8536.25', \
         'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) \
         Chrome/28.0.1468.0 Safari/537.36', \
         'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']
 def search(self, queryStr):
     queryStr = urllib2.quote(queryStr)
     url = 'https://www.google.com.hk/search?hl=en&q=%s' % queryStr
     request = urllib2.Request(url)
     index = random.randint(0, 9)
     user_agent = user_agents[index]
     request.add_header('User-agent', user_agent)
     response = urllib2.urlopen(request)
     html = response.read()
     results = self.extractSearchResults(html)
登入後複製

 於是,我們的程式碼就成了下面這個樣子:

rrreee

 不要被user_agents那個list嚇到,那其實就是10個user agent 字串,這麼做是讓我們偽裝的更好一些,如果你需要更多的user agent 請看這裡UserAgentString。

17-19行表示隨機選擇一個user agent 字串,然後用request 的add_header方法偽裝一個user agent。

  透過偽裝user agent能夠讓我們持續抓取搜尋引擎結果,如果這樣還不行,那我建議在每兩次查詢間隨機休眠一段時間,這樣會影響抓取速度,但是能夠讓你更持續的抓取結果,如果你有多個IP,那抓取的速度也就上來了。

🎜🎜
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Python查找文本文件的ZIPF分佈 如何使用Python查找文本文件的ZIPF分佈 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分佈

如何在Python中下載文件 如何在Python中下載文件 Mar 01, 2025 am 10:03 AM

如何在Python中下載文件

我如何使用美麗的湯來解析HTML? 我如何使用美麗的湯來解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美麗的湯來解析HTML?

python中的圖像過濾 python中的圖像過濾 Mar 03, 2025 am 09:44 AM

python中的圖像過濾

如何使用Python使用PDF文檔 如何使用Python使用PDF文檔 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文檔

如何在django應用程序中使用redis緩存 如何在django應用程序中使用redis緩存 Mar 02, 2025 am 10:10 AM

如何在django應用程序中使用redis緩存

引入自然語言工具包(NLTK) 引入自然語言工具包(NLTK) Mar 01, 2025 am 10:05 AM

引入自然語言工具包(NLTK)

如何使用TensorFlow或Pytorch進行深度學習? 如何使用TensorFlow或Pytorch進行深度學習? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch進行深度學習?

See all articles