scrapy之spider模塊

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'
相關文章
相關標籤/搜索