Scrapy網絡爬蟲:使用Shell 命令分析中關村在線手機報價網頁

Scrapy shell 命令使用戶可以在交互式命令行下操作一個Scrapy爬蟲,通常利用該工具進行前期爬取實驗,從而提高開發效率。本文以中關村在線手機報價主頁為例演示如何使用Scrapy Shell命令。

使用Scrapy shell命令打開shell

scrapy shell http://detail.zol.com.cn/cell_phone_index/subcate57_list_1.html

Scrapy網絡爬蟲:使用Shell 命令分析中關村在線手機報價網頁

Scrapy shell

運行這條命令之後,Scrapy shell 會使用url參數構造一個Request的對象,並提交給Scrapy引擎,頁面下載完成後,程序進入一個python shell當中,在此環境中已經創建好了一些變量(對象和函數),以下幾個最為常用:

  • request:最近一次下載對應的Request對象。

  • response:最近一次下載對應的Response對象。

  • fetche(req_or_url):該函數用於下載頁面,可傳入一個Request對象或url字符串,調用後會更新變量request和response。

  • view(response):調用系統默認瀏覽器顯示response中的頁面。

調用view函數,在瀏覽器中顯示response所包含的頁面信息:

view(response)

通常view函數打開的頁面和瀏覽器直接輸入url打開的頁面看起來很像。但是,前者是scrapy爬蟲下載的頁面,而後者是由瀏覽器下載的頁面,有時候他們是不相同的。在進行網頁分析是,使用view函數更加可靠。

Scrapy網絡爬蟲:使用Shell 命令分析中關村在線手機報價網頁

中關村在線手機報價主頁

利用Chrome開發者工具看到,在

    中可以提取手機名、參考報價以及詳情頁面。

    在scrapy shell中嘗試著提取這些信息:

    //提取手機名

    In:phone_name = response.xpath('//*[@id="J_PicMode"]/li/h3/a/text()').extract_first()

    Out: 'vivo X20(全網通) '

    //提取手機價格

    In:phone_price =response.xpath(' //*[@id="J_PicMode"]/li/div[1]/span[2]/b[2]/text()').extract_first()

    Out: '2998'

    //提取手機詳情頁

    phone_detail_url =response.xpath('//*[@id="J_PicMode"]/li/h3/a/@href').extract_first()

    使用fetch函數進入vivo x20手機詳情頁面並在瀏覽器中顯示:

    In:fetch(response.urljoin(phone_detail_url))

    2018-01-07 22:47:50 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)

    In:view(response)

    Scrapy網絡爬蟲:使用Shell 命令分析中關村在線手機報價網頁

    vivo X20詳情頁


分享到:


相關文章: