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'