PySpider爬取去哪兒攻略數據項目


1 創建項目

  • 點擊WEB中的Create創建項目

  • 填入相關項目名和其實爬取URL

 

  • 創建后進入項目首頁

 

  • 右邊 Handler 是pyspider的主類,整個爬蟲一個Handler,其中可定義爬蟲的爬取、解析、存儲邏輯;crawl_config 中定義項目爬取配置;on_start() 爬取入口,通過調用 crawl() 方法新建爬取請求,第一個參數是爬取的URL,另外一個參數callback指定爬取成功后的解析方法,即index_page()。index_page() 接收Response參數,Response對接了pyquery,可直接調用doc()解析頁面;detail_page() 方法接收Response參數,抓取詳情頁信息,不生成新的請求,對Response解析后以字典形式返回數據。
  • 左邊,上面綠色和灰色是運行參數內容,下面點擊左邊RUN按鈕,運行項目,follow中是請求連接,點擊連接右邊運行三角,進入頁面;html是源碼;web是渲染頁面; enable css selecter helper幫助進行css選擇,在右邊代碼中選中doc方法引號中內容后,點擊web窗口右上方箭頭實現右邊代碼css選擇替換;massage是頁面信息。

 

  • 點擊run運行項目

  • 發現follows中出現一條消息,點擊follows

 

  • 出現如下界面

 

  • 點擊三角運行符號,進入該界面

 

  • 出現頁面所有請求后,點擊HTML顯示源碼,點擊web展示頁面,如果web窗口太小,可以通過開發者模式調整(嘗試網上說的修改debug.min.css失敗)

 

  • 選擇右邊index_page()方法中的css選擇器內容,點擊左邊enable css selecter helper然后選擇對應元素,在3位置出現選擇的元素后,點擊右邊箭頭,對右邊代碼選中內容進行替換

 

  • 再次點擊左邊run,follows變成10條選中css的請求連接。

 

  • 要想選擇多頁,即實現自動翻頁爬取,修改index_page()內容
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
    for each in response.doc('li > .tit > a').items():
        self.crawl(each.attr.href, callback=self.detail_page)
    next=response.doc('.next').attr.href
    self.crawl(next,callback=self.index_page)    
  • 再次點擊run,follows變成11(多了next)
  • 隨便點進一個內容連接,發現沒有圖片,需要修改crawl添加fetch參數,修改后,重新run
self.crawl(each.attr.href, callback=self.detail_page,fetch_type='js')

 

  • 然后修改detail_page(),設置要保存的數據信息
@config(priority=2)

    def detail_page(self, response):

        return {

            "url": response.url,

            "title": response.doc('#booktitle').text(),

            "date":response.doc('.when .data').text(),

            "day":response.doc('.howlong .data').text(),

            "who":response.doc('.who .data').text(),

            "text":response.doc('#b_panel_schedule').text(),

            "image":response.doc('.cover_img').attr.src,

        }
  • 點擊run運行成功后,點擊右邊save保存項目

 

  • 之后就可以返回pyspider首頁,管理項目

 

  • 選擇項目運行狀態,設置rate/burst【rate表示1s發出多少個請求;burst相當於流控制中令牌桶算法的令牌數;這兩個值越大爬取速率越快,也越有可能被封】; progress 四個進度條各時間段狀態,藍色等待執行,綠色成功執行,黃色失敗后等待重試,紅色失敗太多被忽略的任務actions可以運行項目查看結果。
  • 我們可以看一下result,右上角可以下載數據

 

2 pyspider用法詳解

  • 命令行:

pyspider all / pyspider # 啟動

pyspider [OPTIONS] COMMAND [ARGS]

可以指定配置文件訪問,pyspider -c pyspider.json all

也可以單獨運行一個組件,pyspider scheduler/fetcher/processor [OPTIONS]

更換端口運行 pyspider webui --port 5001 ,也可以寫進配置文件中

  • crawl方法參數配置:

url 可以是列表也可以是字符串;callback 回調函數解析響應的方法;age 任務的有效時間;priority 優先級越大越優先;exetime 定時任務,時間戳類型;retries 重試次數,默認為3;itag 判定網頁是否發生變化的節點值;auto_recrawl 值為true即開啟后爬取任務過期后悔重新執行;method HTTP請求方式默認是GET;params 定義get請求參數;data 定義POST表單數據;files 定義上傳文件;user_agent;headers;cookies;connect_timeout 初始化最長等待時間,默認20s;timeout 抓取最長等待時間,默認120s;allow_redirects 自動處理重定向,默認True;validate_cert 是否驗證證書 對HTTPS有效,默認True;proxy 代理;fetch_type 開啟PhantomJS渲染;js_script 頁面加載后執行的js腳本;js_run_at js腳本運行位置,默認document-end;js_viewport_width/js_viewport_height js渲染時窗口大小;load_iamges 在加載js頁面時是否加載圖片,默認否;save 可以在不同方法直接傳遞參數;cancel 取消任務,如果一個任務是active狀態,需要設置force_update為True;force_update 強制更新狀態

  • 任務區分

pyspider判斷兩個任務是否重復,對URL的MD5值作為任務的唯一ID。重寫task_id()方法可以改變ID計算方式,進行區分如相同URL的post和get

  • 全局配置

在crawl_config中進行指定

  • 定時爬取

可以在on_start前的every屬性設置爬取的時間間隔,24*60代表每天執行一次。index_page上面的age代表過期時間,如果未到過期時間是不會重新執行的。

  • 項目狀態

TODO 剛創建還沒有實現;STOP 停止某項目抓取;CHECKING 正在運行的項目被修改后;DEBUG/RUNNIG 調試/運行;PAUSE 暫停,爬取中多次連續錯誤,會被自動設置暫停,一段時間后繼續爬取;

  • 抓取進度

progress 四個進度條各時間段狀態,藍色等待執行,綠色成功執行,黃色失敗后等待重試,紅色失敗太多被忽略的任務。

  • 刪除項目

pyspider沒有刪除項目的選項,如果要刪除,將項目狀態設置為STOP,分組名稱設置為delete,24h后自動刪除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM