Scrapy_Redis Settings.py设置文件

本文详细介绍了Scrapy爬虫框架的各项关键配置参数,包括UA模拟、并发请求管理、下载延时设置、日志记录、中间件及管道配置等,并探讨了如何通过调整这些参数优化爬虫性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置ua,来模拟浏览器请求

#USER_AGENT = 'downloadmiddlerware (+http://www.yourdomain.com)'

设置请求的最大并发数据(下载器) 默认是16

#CONCURRENT_REQUESTS = 32

设置请求的下载延时,默认为0

#DOWNLOAD_DELAY = 3

设置网站的最大并发请求数量,默认是8

#CONCURRENT_REQUESTS_PER_DOMAIN = 16

设置某个ip的最大并发请求数量,默认是0
如果非0

1.CONCURRENT_REQUESTS_PER_DOMAIN不生效,
这时候请求的并发数量将针对于ip,而不是网站了

2.设置的DOWNLOAD_DELAY就是正对于ip而不是网站了

CONCURRENT_REQUESTS_PER_IP = 16

关于日志信息的设置

LOG_FILE = 'xxx.log'
LOG_LEVEL = 'INFO/DEBUG/....'

是一个终端的扩展插件

#TELNETCONSOLE_ENABLED = False

设置默认的请求头(cookies信息不要放在这里)

DEFAULT_REQUEST_HEADERS = {
  # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  # 'Accept-Language': 'en',
    'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36',

}

设置和激活爬虫中间件

#SPIDER_MIDDLEWARES = {
#    'downloadmiddlerware.middlewares.DownloadmiddlerwareSpiderMiddleware': 543,
#}

设置和激活下载中间件(后面的数字表示优先级)

DOWNLOADER_MIDDLEWARES = {
   # 'downloadmiddlerware.middlewares.DownloadmiddlerwareDownloaderMiddleware': 543,
   #  'downloadmiddlerware.middlewares.UserAgentDownloadMiddlerware':543,
    'downloadmiddlerware.middlewares.SeleniumDownloadMiddlerWare':543,
}

设置扩展

#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

设置和激活管道文件(后面的数字表示优先级)

#ITEM_PIPELINES = {
#    'downloadmiddlerware.pipelines.DownloadmiddlerwarePipeline': 300,
#}

自动限速的扩展(实现上一个请求和下一个请求之间的时间是不固定的)
默认请情框下自动限速的扩展是关闭的

:AUTOTHROTTLE_ENABLED:False
# AUTOTHROTTLE_ENABLED = True

初始的下载吧延时默认是5秒

# AUTOTHROTTLE_START_DELAY = 5

最大下载延时

# AUTOTHROTTLE_MAX_DELAY = 60

针对于网站的最大的并行请求数量

# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0

调试模式:默认为False,未开启

# AUTOTHROTTLE_DEBUG = False

设置数据的缓存,默认情况下是未开启的

HTTPCACHE_ENABLED = True

设置缓存的超时时间,默认为0表示永久有效

HTTPCACHE_EXPIRATION_SECS = 0

设置缓存的存储文件路径

HTTPCACHE_DIR = 'httpcache'

设置去重组件,使用的是scrapy_redis的去重组件,而不再使用scrapy框架自己的去重组件了

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

设置调度器,使用的是scrapy_redis重写的调度器,而不再使用scrapy框架自带的调度器了

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

可以实现断点爬取(请求的记录不会丢失,会存储在redis数据库中,不会清除redis的任务队列)

SCHEDULER_PERSIST = True

设置任务队列的模式
SpiderPriorityQueue是scrapy_redis默认使用的队列模式(有自己的优先级)

SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"

使用了队列的形式,任务先进先出

#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"

采用了栈的形式,任务先进后出

#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
`
ITEM_PIPELINES = {
    'example.pipelines.ExamplePipeline': 300,
    # 实现这个管道,可以将爬虫端获取的item数据,统一保存在redis数据库中
    'scrapy_redis.pipelines.RedisPipeline': 400,
}

指定要存储的redis数据库的主机ip

REDIS_HOST = '127.0.0.1'

指定redis数据库主机的端口

REDIS_PORT = 6379

转自:https://www.jianshu.com/p/7bc1b21d8073

Traceback (most recent call last): File "/root/anaconda3/bin/scrapy", line 8, in <module> sys.exit(execute()) File "/root/anaconda3/lib/python3.9/site-packages/scrapy/cmdline.py", line 160, in execute cmd.crawler_process = CrawlerProcess(settings) File "/root/anaconda3/lib/python3.9/site-packages/scrapy/crawler.py", line 332, in __init__ super().__init__(settings) File "/root/anaconda3/lib/python3.9/site-packages/scrapy/crawler.py", line 202, in __init__ self.spider_loader = self._get_spider_loader(settings) File "/root/anaconda3/lib/python3.9/site-packages/scrapy/crawler.py", line 196, in _get_spider_loader return loader_cls.from_settings(settings.frozencopy()) File "/root/anaconda3/lib/python3.9/site-packages/scrapy/spiderloader.py", line 72, in from_settings return cls(settings) File "/root/anaconda3/lib/python3.9/site-packages/scrapy/spiderloader.py", line 27, in __init__ self._load_all_spiders() File "/root/anaconda3/lib/python3.9/site-packages/scrapy/spiderloader.py", line 56, in _load_all_spiders for module in walk_modules(name): File "/root/anaconda3/lib/python3.9/site-packages/scrapy/utils/misc.py", line 106, in walk_modules submod = import_module(fullpath) File "/root/anaconda3/lib/python3.9/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/home/house_info/house_info/spiders/HouseSpyder.py", line 2, in <module> from scrapy_redis.spiders import RedisSpider ModuleNotFoundError: No module named 'scrapy_
最新发布
03-21
<think>嗯,用户遇到了Scrapy项目中的ModuleNotFoundError,说缺少'scrapy_redis'模块。首先,我得确认用户是否正确安装了scrapy_redis。通常这种问题是因为没有安装或者安装方式不对。 那用户可能已经尝试过直接导入scrapy_redis,但失败了。我应该先建议他们用pip安装。不过,可能他们用的是虚拟环境,所以需要确认是否在正确的环境中安装。比如,如果用户用virtualenvwrapper创建了虚拟环境,安装时得先激活那个环境,再执行pip install scrapy_redis。引用里提到用户可能用虚拟环境管理多个Python版本,这时候安装包必须在对应的环境中进行[^2]。 接下来,安装完成后,用户还需要在Scrapy配置文件中进行设置,比如指定调度器和去重类。引用中的设置项需要被正确配置,比如SCHEDULER、DUPEFILTER_CLASS等[^1]。用户可能没有正确修改settings.py,或者路径有误。 另外,用户可能还需要安装Redis服务器,并确保连接信息正确。比如在settings.py设置REDIS_URL,指向正确的Redis实例。引用里提到redis.connect的参数,这可能和配置相关[^3]。如果Redis服务器没启动或者配置错误,也可能导致问题,虽然主要错误是模块找不到,但后续步骤可能会遇到连接问题。 还有可能用户安装了scrapy-redis,但版本不兼容当前的ScrapyPython版本。这时候需要检查版本要求,可能需要指定版本号安装,比如pip install scrapy-redis==某个版本。 最后,用户可能需要检查他们的中间件或管道是否正确引用了scrapy_redis的组件。比如在Spider中间件里使用随机User-Agent和代理,类似引用中的代码[^4],但这里可能还需要scrapy_redis的特定中间件设置。 总结一下,解决步骤应该是:安装scrapy_redis,确认虚拟环境,配置settings.py,安装并启动Redis服务器,检查版本兼容性,以及正确引用中间件和管道。可能还需要重启Scrapy项目让配置生效。</think>### 逐步解决方案:安装与配置`scrapy_redis` #### 1. **安装`scrapy_redis`模块** 通过以下命令安装(需确保在Scrapy项目的虚拟环境中操作): ```bash pip install scrapy_redis ``` 如果使用虚拟环境(如`crawler-env`),需先激活环境: ```bash workon crawler-env # 根据引用[2]的虚拟环境管理方式 ``` 再执行安装命令[^1]。 #### 2. **配置Scrapy项目** 在`settings.py`中添加以下配置: ```python # 启用scrapy_redis调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 启用去重过滤器 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 允许暂停后恢复爬取 SCHEDULER_PERSIST = True # 设置Redis连接信息(根据实际Redis服务器地址修改) REDIS_URL = "redis://:password@localhost:6379/0" ``` #### 3. **安装并启动Redis服务器** - **安装Redis**(以Ubuntu为例): ```bash sudo apt-get install redis-server ``` - **启动Redis服务**: ```bash sudo service redis-server start ``` #### 4. **验证安装与配置** - 检查Python环境中是否存在`scrapy_redis`: ```python import scrapy_redis # 无报错则安装成功 ``` - 确保Scrapy的中间件或管道未错误引用未安装的模块(参考引用[4]的中间件配置示例)[^4]。 #### 5. **处理依赖冲突** 如果出现版本冲突,可尝试指定版本安装: ```bash pip install scrapy_redis==0.7.2 # 示例版本 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值