1. 程式人生 > >利用 pyspider 框架抓取貓途鷹酒店信息

利用 pyspider 框架抓取貓途鷹酒店信息

tasks 啟動 font oca star 一鍵 resp att blank

  利用框架 pyspider 能實現快速抓取網頁信息,而且代碼簡潔,抓取速度也不錯。

  環境:macOS;Python 版本:Python3。

  1.首先,安裝 pyspider 框架,使用pip3一鍵安裝:

pip3 pyspider

2.終端輸入 pyspider all 啟動 pyspider:

技術分享

打開 Chrome,地址欄輸入 localhost:5000 進入 pyspider 框架的webui界面。

技術分享

點擊 create ,創建 一個新的project。

3.創建完 project 後,我們便進入了代碼調試界面。

這次我們要抓取的信息是貓途鷹網關於布拉格的酒店信息,把網址填入 on_star 一欄並替換掉 on_star , 點擊 save 保存,點擊左上角 run 選項,然後點擊出現的網址右側的箭頭的選項:

技術分享

便出現 index_page 的頁面,我們點擊 web 選項卡,出現網頁內容後點擊 enable css selector helper ,選中酒店標題的超鏈接,這時上方便出現該標題的 CSS 選擇器,把選擇器內容復制粘貼替換掉右側代碼中的 a[href^="http"] ,save 後再次點擊 run,但是 pyspider 的選擇器並不一定準確,需要自己隨時更改。這時我們便得到了我們想要的酒店標題超鏈接。

技術分享

技術分享

4.點擊其中一個網頁的右邊的小箭頭,進入詳情頁界面,我們要獲取的信息便是詳情頁中的內容。類似的用 CSS 選擇器獲取酒店的信息,寫入代碼如下:

 def detail_page(self, response):
        url 
= response.url name = response.doc(.heading_title).text() rating = response.doc(.header_rating .taLnk).text() ranking = response.doc(.prw_common_header_pop_index > span).text() location = response.doc(.colCnt3).text() phone = response.doc(.blEntry.phone > span:nth-child(2)
).text() grade = response.doc(.overallRating).text() return { "url": url, "name": name, "rating": rating, "ranking": ranking, "location": location, "phone": phone, "grade": grade }

便返回酒店鏈接,名稱,點評,排名,地址,電話,評分這七個信息,保存後點擊 run,我們便能看到打印的信息。

5.存儲信息到 MongoDB:

import pymongo

client = pymongo.MongoClient(localhost)
db = client[trip]

def on_result(self, result):
    if result:
        self.save_to_mongo(result)

def save_to_mongo(self, result):
    if self.db[布拉格].insert(result):
        print(存儲到 MongoDB 成功, result)

6.模擬翻頁抓取多頁面:

在 index_page(self, response) 函數中插入:

next = response.doc(.pagination .nav.next).attr.href
self.crawl(next, callback=self.index_page)

7.到這時,我們代碼便寫完了,退出 project ,在控制面板中 status 欄更改方式為 DEBUG ,點擊 run,運行代碼,Active Tasks 可以查看當前任務。技術分享

8.存儲到MongoDB 的信息。

技術分享

到現在,我們便完成了對貓途鷹網上布拉格酒店信息的爬取。

利用 pyspider 框架抓取貓途鷹酒店信息