製作Scrapy爬蟲,最基礎的需要四步:
- 新建項目
scrapy startproject Movies
自動生成一個名爲“Movies”的爬蟲項目
scrapy genspider getmovies movie.douban.com
自動生成一個名爲“getmovies”的爬蟲
整個項目目錄結構如下:
- 定義目標數據
編輯items.py文件,定義需要獲取數據的結構,該結構操作類似字典操作
import scrapy
class MoviesItem(scrapy.Item):
UserName = scrapy.Field()
UserID = scrapy.Field()
MovieName = scrapy.Field()
MovieID = scrapy.Field()
MovieScore = scrapy.Field()
MovieComment = scrapy.Field()
3. 製作爬蟲
編輯getmovies.py文件,定義了一個爬蟲類(默認繼承於scrapy.Spider基類)
name:爬蟲名稱,用於識別項目內的不同爬蟲,可用scrapy list 獲取整個項目爬蟲名列表
allowed_domains:爬蟲允許的域範圍,超過域範圍的數據不再抓取
start_urls:列表數據,開始抓取的URL地址
parse方法:解析每次抓取數據結果(在該方法內實現爬蟲數據的解析工作,如果是多層爬取,該方法還將產生下級爬取URL)
import scrapy
class GetmoviesSpider(scrapy.Spider):
name = 'getmovies'
allowed_domains = ['movie.douban.com']
start_urls = ['http://movie.douban.com/']
def parse(self, response):
pass
parse方法中必須返回item給管道,可以用yield item將parse變成生成器
4. 存儲數據
編輯pipelines.py文件,用方法process_item處理每個解析後的item數據,可以存入數據庫,也可以存入文件
class MoviesPipeline(object):
def process_item(self, item, spider):
return item
關於scrapy的其他事項:
1. 設置
編輯settings.py文件,可以修改默認爬蟲設置
USER_AGENT='所有爬蟲發出請求的user_agent'
ROBOTSTXT_OBEY='爬蟲是否遵循網站爬蟲協議robots.txt規定';建議關閉
CONCURRENT_REQUESTS='請求併發數'
DOWNLOAD_DELAY='下載延遲(秒)'
COOKIES_ENABLED='是否禁用Cookie'
DEFAULT_REQUEST_HEADERS='默認請求報頭'
SPIDER_MIDDLEWARES='爬蟲中間件,所有定義的爬蟲中間件都必須在此註冊啓用纔有效,值大小範圍0-1000,越小優先級越高'
DOWNLOADER_MIDDLEWARES='下載中間件'
ITEM_PIPELINES='管道文件,必須啓用管道纔能有效'
2. 中間件
編輯middlewares.py文件,可以爲項目添加中間件
3. 命令操作
常用的:
scrapy list獲取爬蟲列表
scrapy shell用於進入shell來測試爬取結果,驗證解析
scrapy crawl getmovies 執行具體一個爬蟲進行爬取並處理