利用 pyspider 框架抓取貓途鷹酒店信息
利用框架 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 框架抓取貓途鷹酒店信息