Pyspider爬虫简单框架——链家网
生活随笔
收集整理的這篇文章主要介紹了
Pyspider爬虫简单框架——链家网
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pyspider
目錄
pyspider簡單介紹
一個國人編寫的強大的網絡爬蟲系統并帶有強大的WebUI。采用Python語言編寫,分布式架構,支持多種數據庫后端,
強大的WebUI支持腳本編輯器,任務監視器,項目管理器以及結果查看器
官方文檔: http://docs.pyspider.org/en/latest/
開源地址: http://github.com/binux/pyspider
中文文檔: http://www.pyspider.cn/
pyspider框架的特性
- python腳本控制,可以使用用任何你喜歡的html解析包(內置pyquery)
- WEB界面編寫調試腳本,啟停腳本,監控執行狀態,查看活動內容,獲取結果產出
- 數據庫存儲支持MySQl,MongoDB,Redis,SQLite,Elasticsearch,PostgreSQL及SQLAlchemy
- 隊列服務支持RabbitMQ,Beanstalk,Redis和Kombu
- 支持抓取JavaScript的頁面
- 組件可替換,支持單機/分布式部署,支持Docker的部署
- 強大的調度控制,支持超時重爬及優先級設置
- 支持python2&3
pyspider的安裝
pip install pyspider
- 安裝完成后運行,在cmd窗口輸入pyspider
pyspider的使用:
- 在瀏覽器中輸入最后一行的IP和端口號。
- 在web控制臺點create按鈕新建項目。
- 保存后打開代碼編輯器(代碼編輯器默認有簡單的示例代碼)
- 右側就是代碼編輯器,,以后可以直接在這里添加和修改代碼。代碼如下:
代碼分析:
- def on_start(self)方法是入口代碼。當在web控制臺點擊run按鈕時會執行此方法。
- self.crawl(url, callback=self.index_page)這個方法是調用API生成一個新的爬蟲任務,這個任務被添加到待爬取隊列
- def index_page(self.response)這個方法獲取一個response對象。response.doc是pyquery對象的一個擴展方法。pyquery是一個類似于jquery的對象選擇器。
- def detail_page(self, response)返回一個結果即對象。這個結果默認會被添加到resultdb數據庫(如果啟動時沒有指定數據庫默認調用sqlite數據庫)。也可以重寫on_result(self, result) 方法來指定保存位置。
- 當完成腳本編寫,調試無誤后,請先保存腳本,然后返回控制臺首頁
- 直接點擊項目狀態status那欄,把狀態由TTODO改成debug或running
- 最后點擊項目最右邊那個RUN按鈕啟動項目
- 當progress那欄有數據顯示說明啟動成功。就可以點擊右側的result查看結果了
技巧:
- pyspider訪問https協議得網站是,會提示證書問題,需要設置validate_cert = False,屏蔽證書驗證
- 預覽網頁得時候,可能會出現空白頁面,是因為pysipder不加載JavaScript代碼,用fetch_type='js',pyspider會自動調用phantomjs來渲染網頁。前提是電腦上已經安裝了phantomls.exe插件
- 當需要刪除項目時,將status狀態改成STOP,再將group寫上delete,pyspider默認在STOP的delete狀態下保存24小時后刪除
enable css selector helper可以在點擊了web 的網頁預覽下,獲取網頁的css選擇器
點擊圖片箭頭的按鍵,就會生成對應css選擇器在光標所在的位置處
- follows是根據代碼請求所跟進的url鏈接,點擊實現網頁跳轉
- 當代碼調試出錯的時候,要回到最初的首頁開始重新調試
實戰
爬取鏈家網的信息:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-11-02 10:54:11
# Project: ddd from pyspider.libs.base_handler import * class Handler(BaseHandler):
crawl_config = {
} @every(minutes=24 * 60) # 設置爬取的時間間隔
def on_start(self):
self.crawl('https://cs.lianjia.com/ershoufang/', callback=self.index_page, validate_cert = False) # 參數三是設置不驗證ssl證書 @config(age=10 * 24 * 60 * 60) # 過期時間
def index_page(self, response):
for each in response.doc('.title > a').items():
self.crawl(each.attr.href, callback=self.detail_page, validate_cert = False) @config(priority=2) # 優先級 數大極高
def detail_page(self, response):
yield {
'title': response.doc('.main').text(),
'special': response.doc('.tags > .content').text(),
'price': response.doc('.price > .total').text(),
'sell point': response.doc('.baseattribute > .content').text()
}
結果:分別爬取了賣房的標題(title),特點(special),賣點(sell point)和價格(price),因為字典保存,所以無序
總結
以上是生活随笔為你收集整理的Pyspider爬虫简单框架——链家网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Springboot:员工管理之公共页面
- 下一篇: redis-hash命令