scrapy中的spider的用法 :redis
一、scrapy命令行能夠傳參數給構造器dom
scrapy crawl myspider -a category=electronics
構造器接收傳入的參數electron
import scrapy class MySpider(Spider): name = 'myspider' def __init__(self, category=None, *args, **kwargs): super(MySpider, self).__init__(*args, **kwargs) self.start_urls = ['http://www.example.com/categories/%s' % category] # ...
二、spider.Spider: 在系統生成的腳本或本身編寫的腳本都必需要繼承Spider類,功能是調用start_urls/start_requests並將結果給parse處理
allowd_domains:當offsiteMiddleware啓用時,不在其內的域名不會被爬取scrapy
三、spider默認的運行規則:ide
一、spider啓動函數
二、運行start_requests
(),此方法使用get方法請求url,僅會被scrapy調用一次post
三、start_requests調用make_requests_from_url
(url)網站
四、start_urls中的url被請求,結果返回給parse 函數處理url
scrapy默認使用get方法請求url,那當我要post登錄網站,再爬取數據,怎麼辦呢?spa
能夠經過改寫start_requests()方法來實現,改寫了scrapy默認的運行規則
def start_requests(self): return [scrapy.FormRequest("http://www.example.com/login", formdata={'user': 'john', 'pass': 'secret'}, callback=self.logged_in)] def logged_in(self, response): # here you would extract links to follow and return Requests for # each of them, with another callback pass
四、parser():是scrapy 處理response的默認方法,負責返回處理的數據
scrapy-reids:
一、修改settings
SCHEDULER = "scrapy_redis.scheduler.Scheduler" DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" ITEM_PIPELINES = { 'scrapy_redis.pipelines.RedisPipeline': 300 } REDIS_URL = 'redis://user:pass@hostname:9001'