學習目標:
了解 scrapy的日誌資訊
掌握 scrapy的常用配置
掌握 scrapy_redis配置
了解scrapy_splash配置
了解scrapy_redis和scrapy_splash配合使用的配置
user_agent 設定ua
default_request_headers 設定預設請求頭,這裡加入了user_agent將不起作用
item_pipelines 管道,左位置右權重:權重值越小,越優先執行
spider_middlewares 爬蟲中介軟體,設定過程和管道相同
cookies_enabled 預設為true表示開啟cookie傳遞功能,即每次請求帶上前一次的cookie,做狀態保持
cookies_debug 預設為false表示日誌中不顯示cookie的傳遞過程
log_level 預設為debug,控制日誌的等級
log_file 設定log日誌檔案的儲存路徑,如果設定該引數,日誌資訊將寫入檔案,終端將不再顯示,且受到log_level日誌等級的限制
5.1 原理
5.2 重寫dupefilter去重類,並在settings.py中使用
5.2.1 重寫去重類
from __future__ import absolute_import
from copy import deepcopy
from scrapy.utils.request import request_fingerprint
from scrapy.utils.url import canonicalize_url
from scrapy_splash.utils import dict_hash
from scrapy_redis.dupefilter import rfpdupefilter
def splash_request_fingerprint(request, include_headers=none):
""" request fingerprint which takes 'splash' meta key into account """
fp = request_fingerprint(request, include_headers=include_headers)
if 'splash' not in request.meta:
return fp
splash_options = deepcopy(request.meta['splash'])
args = splash_options.setdefault('args', {})
if 'url' in args:
args['url'] = canonicalize_url(args['url'], keep_fragments=true)
return dict_hash(splash_options, fp)
class splashawaredupefilter(rfpdupefilter):
"""dupefilter that takes 'splash' meta key in account.
it should be used with splashmiddleware.
"""def request_fingerprint(self, request):
return splash_request_fingerprint(request)
"""以上為重寫的去重類,下邊為爬蟲**"""
# 分布式的起始的url不能使用splash服務!
# 需要重寫dupefilter去重類!
def parse(self, response):
yield splashrequest('',
callback=self.parse_splash,
args=, # 最大超時時間,單位:秒
endpoint='render.html') # 使用splash服務的固定引數
def parse_splash(self, response):
with open('splash_and_redis.html', 'w') as f:
f.write(response.body.decode())
5.2.2 scrapy_redis和scrapy_splash配合使用的配置# 渲染服務的url
splash_url = ''
**********_middlewares =
# 使用splash的http快取
# 去重過濾器
# dupefilter_class = 'scrapy_splash.splashawaredupefilter'
# dupefilter_class = "scrapy_redis.dupefilter.rfpdupefilter" # 指紋生成以及去重類
dupefilter_class = 'test_splash.spiders.splash_and_redis.splashawaredupefilter' # 混合去重類的位置
scheduler = "scrapy_redis.scheduler.scheduler" # 排程器類
scheduler_persist = true # 持久化請求佇列和指紋集合, scrapy_redis和scrapy_splash混用使用splash的dupefilter!
item_pipelines = # 資料存入redis的管道
redis_url = "redis:" # redis的url
注意:了解scrapy的日誌資訊
掌握scrapy的常用配置
掌握scrapy_redis配置
了解scrapy_splash配置
了解scrapy_redis和scrapy_splash配合使用的配置
Python之scrapy框架爬蟲
scrapy命令詳解 可能是如今最全最簡單的scrapy命令解釋 明天上班,又要爬 現在每天做的工作有50 的時間爬 40 的時間清理資料,10 寫報告。若想自學資料分析,側重點很重要,我當初把大部分經歷放在了python的pandas numpymatplotlib上面,其他時間一部分放在sql身...
python爬蟲框架之Scrapy
scrapy 是乙個爬蟲框架,提取結構性的資料。其可以應用在資料探勘,資訊處理等方面。提供了許多的爬蟲的基類,幫我們更簡便使用爬蟲。基於twisted 準備步驟 首先安裝依賴庫twisted 在這個 下面去尋找符合你的python版本和系統版本的twisted pip install 依賴庫的路徑 ...
python爬蟲scrapy之rules的基本使用
link extractors 是那些目的僅僅是從網頁 scrapy.http.response物件 中抽取最終將會被follow鏈結的物件 scrapy預設提供2種可用的 link extractor,但你通過實現乙個簡單的介面建立自己定製的link extractor來滿足需求 每個linkex...