爬取流程
Spider
類定義如何爬取指定的一個或多個網站,包括是否要跟進網頁裏的連接和如何提取網頁內容中的數據。php
爬取的過程是相似如下步驟的循環:html
1.經過指定的初始URL初始化Request,並指定回調函數。當Request下載完後,生成Response做爲參數傳給回調函數。初始的Request是經過start_requests()讀取start_urls中的URL來生成的,回調函數爲parse()。 2.在回調函數中分析Response的內容,返回Item對象或者Request或包含兩者的可迭代容器。返回Request對象通過Scrapy處理,下載相應的內容,並調用設置的回調函數。 3.在回調函數中,能夠用選擇器(或者Beautiful Soup,lxml這些解析器)來分析網頁內容,生成Item。 4.生成的Item能夠存入數據庫,或存入到文件。
spider類
class scrapy.spiders.Spider:最簡單的爬蟲類。 方法與屬性: name:爬蟲名,要惟一。 allowed_domains:容許爬取的域名列表。 start_urls:初始的URL列表。 custom_settings:參數配置字典,必須是類屬性,由於參數配置在實例化前被更新。 crawler:此屬性是由from_crawler()設置的。 settings:運行此爬蟲的設置。 logger:Python的日誌記錄器,經過爬蟲名建立。 from_crawler(crawler, *args, **kwargs):類方法,用於建立爬蟲。crawler是Crawler的實例對象。 start_requests():當打開爬蟲時調用此方法。會用初始URL列表建立Request。只調用一次。 parse(response):用於處理Response。 log(message[, level, component]):經過封裝logger來發送日誌消息。 closed(reason):爬蟲關閉時調用此方法。
爬蟲參數
爬蟲能夠接受參數來改變它的行爲。這些參數通常用來定義初始URL,或者限定爬取網站的部份內容,也能夠用來配置其它任何功能。node
在運行crawl
命令時,經過-a
選項來傳遞參數(鍵值對):web
scrapy crawl myspider -a category=electronics
而後能夠在__init__()
初始化函數裏獲取參數,如:正則表達式
class MySpider(scrapy.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]
而默認的__init__()
函數會把這些參數定義爲爬蟲的屬性,所以也能夠這樣用:chrome
class MySpider(scrapy.Spider): name = 'myspider' def start_requests(self): yield scrapy.Request('http://www.example.com/categories/%s' % self.category) # 做爲一個屬性