python-scrapy框架(四)settings.py文件的用法详解实例

settings.py文件是Scrapy框架中用来配置爬取相关设置的文件。在Scrapy中,我们可以通过修改settings.py文件来自定义爬虫的行为,包括设置全局变量、配置下载延迟、配置ua池、设置代理以及其他爬虫相关的配置项。下面是对settings.py文件用法的详细解释和一个实例:

1.设置全局变量
在settings.py文件中,我们可以定义一些全局变量,这些变量在整个爬虫过程中都可以使用。例如,我们可以定义一个USER_AGENT变量,用来设置请求的User-Agent头信息:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

2.配置下载延迟
在settings.py文件中,可以通过设置DOWNLOAD_DELAY参数来配置下载延迟,以控制爬取速度。DOWNLOAD_DELAY的单位是秒,可以设置为1或更大的值。例如:
DOWNLOAD_DELAY = 1

3.配置UA池
为了防止网站对爬虫的识别,我们可以设置一个User-Agent池,让每个请求随机选择一个User-Agent进行发送。可以在settings.py文件中设置USER_AGENT_POOL,如下所示:
USER_AGENT_POOL = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK...
]

然后,在Spider中随机选择一个User-Agent进行请求发送:

from scrapy import Spider
from scrapy.utils.project import get_project_settings
from scrapy.utils.httpobj import urlparse_cached

class MySpider(Spider):
    name = 'my_spider'
    
    def __init__(self, name=None, **kwargs):
        self.settings = get_project_settings()
    
    def start_requests(self):
        # ...
        yield scrapy.Request(url, headers={'User-Agent': self.settings['USER_AGENT_POOL'][random.randint(0, len(self.settings['USER_AGENT_POOL'])-1)]})

4.设置代理
如果需要通过代理来进行爬取,可以在settings.py文件中设置PROXIES参数。例如:
PROXIES = [
    'http://proxy1.example.com:8888',
    'http://proxy2.example.com:8888',
    'http://proxy3.example.com:8888',
]

然后,在Spider中随机选择一个代理进行请求发送:

from scrapy import Spider
from scrapy.utils.project import get_project_settings
from scrapy.utils.httpobj import urlparse_cached

class MySpider(Spider):
    name = 'my_spider'
    
    def __init__(self, name=None, **kwargs):
        self.settings = get_project_settings()
    
    def start_requests(self):
        # ...
        yield scrapy.Request(url, meta={'proxy': self.settings['PROXIES'][random.randint(0, len(self.settings['PROXIES'])-1)]})

5.其他爬虫相关配置项
在settings.py文件中,还可以设置其他的爬虫相关配置项,如日志级别、保存路径、爬取深度等。以下是一些常见的配置项:
# 日志级别
LOG_LEVEL = 'INFO'

# 爬虫名称
BOT_NAME = 'my_bot'

# 爬取深度限制
DEPTH_LIMIT = 3

# 是否遵循robots.txt
ROBOTSTXT_OBEY = True

# 是否启用缓存
HTTPCACHE_ENABLED = True

# 缓存过期时间
HTTPCACHE_EXPIRATION_SECS = 0

# 缓存存储路径
HTTPCACHE_DIR = 'httpcache'

# 缓存存储方式
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

这些只是settings.py文件中一些常见的配置项,你可以根据需要添加或修改更多的配置项。以下是更多可能用到的配置项:

6.开启并配置自定义的扩展
Scrapy框架允许开发者编写自定义的扩展来增强爬虫的功能。在settings.py文件中,可以通过EXTENSIONS参数来启用和配置这些扩展。例如,启用并配置自定义的扩展MyExtension:
EXTENSIONS = {
    'myextension.MyExtension': 500,
}

7.配置重试次数
在爬虫过程中,可能会发生请求失败的情况,可以通过配置RETRY_TIMES和RETRY_HTTP_CODES参数来控制自动重试的次数和HTTP响应状态码。例如,设置最大重试次数为3次,仅在遇到500和502的情况下进行重试:
RETRY_TIMES = 3
RETRY_HTTP_CODES = [500, 502]
8.配置并发请求数量
通过并发发送请求可以提高爬取效率,可以通过配置CONCURRENT_REQUESTS参数来设置同时发送的请求数量。例如,设置同时发送10个请求:
CONCURRENT_REQUESTS = 10
9.配置下载器中间件和爬虫中间件
Scrapy框架提供了下载器中间件和爬虫中间件,用于在请求和响应的处理过程中进行自定义的操作。可以通过配置DOWNLOADER_MIDDLEWARES和SPIDER_MIDDLEWARES参数来启用和配置这些中间件。例如,启用并配置自定义的下载器中间件MyDownloaderMiddleware和爬虫中间件MySpiderMiddleware:
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.MyDownloaderMiddleware': 543,
}
SPIDER_MIDDLEWARES = {
    'myproject.middlewares.MySpiderMiddleware': 543,
}

10.配置请求头信息
可以通过设置DEFAULT_REQUEST_HEADERS参数来配置默认的请求头信息。例如,设置Referer和Cookie:
DEFAULT_REQUEST_HEADERS = {
    'Referer': 'http://www.example.com',
    'Cookie': 'session_id=xxxxx',
}

11.配置是否启用重定向
可以通过配置REDIRECT_ENABLED参数来控制是否启用请求的重定向。例如,禁用重定向:
REDIRECT_ENABLED = False

12.配置去重过滤器
Scrapy框架内置了去重过滤器,用于过滤已经爬取过的URL。可以通过配置DUPEFILTER_CLASS参数来选择使用的去重过滤器。例如,使用基于Redis的去重过滤器:
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

这些只是settings.py文件中一些可能用到的配置项。根据实际需求,你可以根据Scrapy框架提供的各种功能来对settings.py文件进行自定义的配置,以满足你的爬虫需求。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Scrapy 项目settings.py 文件中配置中间件的先后顺序为: 1. 先配置自定义中间件, 设置在 `DOWNLOADER_MIDDLEWARES` 和 `SPIDER_MIDDLEWARES` 中 2. 接着配置内置中间件 例如: ```python DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.MyCustomDownloaderMiddleware': 543, 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': None, 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350, 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500, 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550, 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590, 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600, 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750, 'scrapy.downloadermiddlewares.stats.DownloaderStats': 850, 'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900, } SPIDER_MIDDLEWARES = { 'myproject.middlewares.MyCustomSpiderMiddleware': 543, 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50, 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500, 'scrapy.spidermiddlewares.referer.RefererMiddleware': 700, 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800, 'scrapy.spidermiddlewares.depth.DepthMiddleware': 900, } ``` 这里你可以看到在自定义中间件之后是默认的中间件,而且在配置时也会有优先级这么一个概念,数字越小优先级越高。 ### 回答2: 在Scrapy项目settings.py文件中,可以通过DOWNLOADER_MIDDLEWARES和SPIDER_MIDDLEWARES配置中间件的先后顺序。 DOWNLOADER_MIDDLEWARES是用于配置下载器中间件的,该中间件可以通过修改请求和响应来拦截和处理请求和响应。可以通过修改settings.py中的DOWNLOADER_MIDDLEWARES,设置列表中的元素来确定中间件的顺序。列表中的元素按照从高优先级到低优先级的顺序执行。可以通过修改元素的顺序来调整中间件的执行顺序。 SPIDER_MIDDLEWARES是用于配置爬虫中间件的,该中间件可以通过修改爬虫的输入和输出来拦截和处理爬虫的输入和输出数据。可以通过修改settings.py中的SPIDER_MIDDLEWARES,设置列表中的元素来确定中间件的顺序。列表中的元素按照从高优先级到低优先级的顺序执行。可以通过修改元素的顺序来调整中间件的执行顺序。 例如,如果想要在下载器中间件中添加一个自定义的中间件,并希望它在其他中间件之前执行,可以将其添加到DOWNLOADER_MIDDLEWARES列表中的第一个位置。如果想要在爬虫中间件中添加一个自定义的中间件,并希望它在其他中间件之后执行,可以将其添加到SPIDER_MIDDLEWARES列表中的最后一个位置。 通过调整中间件的先后顺序,可以灵活地处理请求和响应以及爬虫的输入和输出,实现特定的功能和逻辑。 ### 回答3: Scrapy是一个功能强大的Python爬虫框架,可以用于爬取和提取网页数据。在Scrapy中,中间件是一个流程处理器,可以对请求和响应进行预处理和后处理。通过在项目settings.py文件中进行配置,可以控制中间件的先后顺序。 在settings.py文件中,有一个名为`DOWNLOADER_MIDDLEWARES`的配置项,它是一个字典,用于指定中间件及其优先级。 比如,我们可以将`DOWNLOADER_MIDDLEWARES`配置为: ```python DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.Middleware1': 543, 'myproject.middlewares.Middleware2': 544, 'myproject.middlewares.Middleware3': 545, } ``` 在这个例子中,`myproject.middlewares.Middleware1`是第一个中间件,优先级为543。`myproject.middlewares.Middleware2`是第二个中间件,优先级为544。`myproject.middlewares.Middleware3`是第三个中间件,优先级为545。 Scrapy会按照优先级来执行中间件,从而达到预期的处理顺序。较小的优先级值会被优先执行。在上面的例子中,Middleware1总是会被最先执行,然后是Middleware2,最后是Middleware3。 当然,也可以通过修改优先级值来调整中间件的执行顺序。较小的优先级值会被先执行,较大的优先级值会被后执行。 总结来说,通过在项目settings.py文件中配置`DOWNLOADER_MIDDLEWARES`,可以调整Scrapy中间件的执行顺序,从而实现对请求和响应的定制化处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

然然学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值