Learning Scrapy筆記(六)- Scrapy處理JSON API和AJAX頁面

來源:互聯網
上載者:User

標籤:

摘要:介紹了使用Scrapy處理JSON API和AJAX頁面的方法

有時候,你會發現你要爬取的頁面並不存在HTML源碼,譬如,在瀏覽器開啟http://localhost:9312/static/,然後右擊空白處,選擇“查看網頁原始碼”,如下所示:

就會發現一片空白

留意到紅線處指定了一個名為api.json的檔案,於是開啟瀏覽器的調試器中的Network面板,找到名為api.json的標籤

在的紅色框裡就找到了原網頁中的內容,這是一個簡單的JSON API,有些複雜的API會要求你先登入,發送POST請求,或者返回一些更加有趣的資料結構。Python提供了一個用於解析JSON的庫,可以通過語句json.loads(response.body)將JSON資料轉變成Python對象

 

api.py檔案的原始碼地址:

https://github.com/Kylinlin/scrapybook/blob/master/ch05%2Fproperties%2Fproperties%2Fspiders%2Fapi.py

 

複製manual.py檔案,重新命名為api.py,做以下改動:

  • 將spider名修改為api

  • 將start_urls修改為JSON API的URL,如下

start_urls = (‘http://web:9312/properties/api.json‘,)

如果在擷取這個json的api之前,需要登入,就使用start_request()函數(參考《Learning Scrapy筆記(五)- Scrapy登入網站》)

  • 修改parse函數
def parse(self, response):    base_url = "http://web:9312/properties/"    js = json.loads(response.body)  for item in js:        id = item["id"]        url = base_url + "property_%06d.html" % id # 構建一個每個條目的完整url        yield Request(url, callback=self.parse_item)

上面的js變數是一個列表,每個元素都代表了一個條目,可以使用scrapy shell工具來驗證:

scrapy shell http://web:9312/properties/api.json

運行該spider:scrapy crawl api

可以看到總共發送了31個request,擷取了30個item

 

再觀察中使用scrapy shell工具檢查js變數的圖,其實除了id欄位外,還可以擷取title欄位,所以可以在parse函數中同時擷取title欄位,並將該欄位的值傳送到parse_item函數中填充到item裡(省去了在parse_item函數中使用xpath來提取title的步驟),修改parse函數如下:

title = item["title"]yield Request(url, meta={"title": title},callback=self.parse_item) #meta變數是一個字典,用於向回呼函數傳遞資料

在parse_item函數中,可以在response中提取這個欄位

l.add_value(‘title‘, response.meta[‘title‘],        MapCompose(unicode.strip, unicode.title))

Learning Scrapy筆記(六)- Scrapy處理JSON API和AJAX頁面

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.