本系列文章主要記錄和講解pyspider的示例代碼,但願能拋磚引玉。pyspider示例代碼官方網站是http://demo.pyspider.org/。上面的示例代碼太多,無從下手。所以本人找出一下比較經典的示例進行簡單講解,但願對新手有一些幫助。python
pyspider爬取的內容經過回調的參數response返回,response有多種解析方式。
一、response.json用於解析json數據
二、response.doc返回的是PyQuery對象
三、response.etree返回的是lxml對象
四、response.text返回的是unicode文本
五、response.content返回的是字節碼
本示例主要是利用response.json解析返回的json數據。其餘返回類型示例見後續文章。json
#!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-06-21 13:57:13 # Project: duitang from pyspider.libs.base_handler import * class Handler(BaseHandler): crawl_config = { } @every(minutes=24 * 60) def on_start(self): self.crawl('http://www.duitang.com/napi/friendship/fans/?start=0&limit=1000&user_id=116965', callback=self.index_page) @config(age=10 * 24 * 60 * 60) def index_page(self, response): for each in response.json['data']['object_list']: id = each['id'] self.crawl('http://www.duitang.com/napi/friendship/fans/?start=0&limit=1000&user_id='+str(id), callback=self.index_page) self.crawl('http://www.duitang.com/napi/people/profile/?user_id='+str(id), callback=self.detail_page) start = response.json['data']['next_start'] total = response.json['data']['total'] user = response.json['data']['visit_user']['user_id'] if start < total: self.crawl('http://www.duitang.com/napi/friendship/fans/?start='+str(start)+'&limit=1000&user_id='+str(user),callback=self.index_page) @config(priority=2) def detail_page(self, response): return { "username": response.json['data']['username'], "id": response.json['data']['id'] }