Scrapy 之settings配置

本文深入解析Scrapy框架的配置参数,包括默认配置如BOT_NAME、ROBOTSTXT_OBEY等,以及关键设置如下载延迟、并发请求、User-Agent、代理和cookies的使用。适合Scrapy初学者和进阶用户理解并优化爬虫性能。

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

  • BOT_NAME

    • 默认: 'scrapybot'
    • 当您使用 startproject 命令创建项目时其也被自动赋值。
  • ROBOTSTXT_OBEY = False
    • 是否遵守rebotes.txt协议
  • CONCURRENT_ITEMS

    • 默认: 100
    • Item Processor(即 Item Pipeline) 同时处理(每个response的)item的最大值。
  • DOWNLOADER_MIDDLEWARES 下载中间键
    • DOWNLOADER_MIDDLEWARES = {
   'middlePro.middlewares.MiddleproDownloaderMiddleware': 543,
}
  • CONCURRENT_REQUESTS

    • 默认: 16
    • Scrapy downloader 并发请求(concurrent requests)的最大值。
  • DEFAULT_REQUEST_HEADERS

    • 默认: 如下

      {
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
           'Accept-Language': 'en',
           }

                         Scrapy HTTP Request使用的默认header。

  • DEPTH_LIMIT

    • 默认: 0
    • 爬取网站最大允许的深度(depth)值。如果为0,则没有限制。
  • DOWNLOAD_DELAY

    • 默认: 0
    • 下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。同时也支持小数:

      DOWNLOAD_DELAY = 0.25 # 250 ms of delay

    • 默认情况下,Scrapy在两个请求间不等待一个固定的值, 而是使用0.5到1.5之间的一个随机值 DOWNLOAD_DELAY 的结果作为等待间隔。
  • DOWNLOAD_TIMEOUT

    • 默认: 180
    • 下载器超时时间(单位: 秒)。
  • ITEM_PIPELINES

    • 默认: {}
    • 保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意,不过值(value)习惯设置在0-1000范围内,值越小优先级越高。
ITEM_PIPELINES = {
            'mySpider.pipelines.SomethingPipeline': 300,
            'mySpider.pipelines.ItcastJsonPipeline': 800,
            }
  • LOG_ENABLED

    • 默认: True
    • 是否启用logging。
  • LOG_ENCODING

    • 默认: 'utf-8'
    • logging使用的编码。
  • LOG_LEVEL

    • 默认: 'DEBUG'
    • log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。
  • USER_AGENT

    • 默认: "Scrapy/VERSION (+http://scrapy.org)"
    • 爬取的默认User-Agent,除非被覆盖。
  • PROXIES: 代理设置

    • 示例:

      PROXIES = [
            {'ip_port': '111.11.228.75:80', 'password': ''},
            {'ip_port': '120.198.243.22:80', 'password': ''},
            {'ip_port': '111.8.60.9:8123', 'password': ''},
            {'ip_port': '101.71.27.120:80', 'password': ''},
            {'ip_port': '122.96.59.104:80', 'password': ''},
            {'ip_port': '122.224.249.122:8088', 'password':''},
          ]
  • COOKIES_ENABLED = False

    • 禁用Cookies

转载于:https://www.cnblogs.com/fengchong/p/10473471.html

### 如何在 Scrapy 中设置自定义请求头 在 Scrapy 中,可以通过多种方式来配置请求头(Headers)。以下是详细的实现方法: #### 方法一:全局配置请求头 可以在 `settings.py` 文件中通过 `DEFAULT_REQUEST_HEADERS` 字段设置默认的请求头。这样所有的请求都会自动携带这些头部信息[^1]。 ```python # settings.py 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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } ``` 上述代码设置了通用的 Accept 和 User-Agent 请求头,适用于大多数场景下的网页抓取需求。 --- #### 方法二:单次请求中的自定义 Header 如果需要针对某个特定请求单独设置请求头,则可以使用 `Request` 对象的 `headers` 参数。这种方式更加灵活,适合不同页面有不同的请求头要求的情况。 ```python import scrapy class ExampleSpider(scrapy.Spider): name = "example" start_urls = ['http://www.example.com'] def parse(self, response): custom_headers = { 'Custom-Header': 'Value', 'Authorization': 'Bearer token_value_here' } yield scrapy.Request( url='https://target-url.com', headers=custom_headers, callback=self.parse_target_page ) def parse_target_page(self, response): # 处理目标页面的数据逻辑 pass ``` 在此示例中,`scrapy.Request()` 的参数 `headers` 被用来传递一组定制化的 HTTP 请求头。 --- #### 方法三:获取响应中的 Cookie 并管理会话状态 有时为了维持登录态或其他依赖于 Cookies 的功能,可能需要用到服务器返回的 Set-Cookie 值。这可以通过访问 `response.headers.get("Set-Cookie")` 或者 `response.headers.getlist("Set-Cookie")` 来完成[^2]。 例如,在某些情况下,可以手动提取并重新发送 Cookies 到下一个请求中: ```python def parse_login_response(self, response): cookies = response.headers.getlist('Set-Cookie') next_request_url = 'https://next-page.com' request_with_cookies = scrapy.Request( url=next_request_url, cookies=[{'name': cookie.split('=')[0], 'value': cookie.split('=')[1]} for cookie in cookies], callback=self.after_login_parse ) yield request_with_cookies ``` 此片段展示了如何解析来自上一次请求的 Cookies,并将其作为下一次请求的一部分提交给服务端。 --- #### 方法四:动态切换代理 IP 当面对反爬机制较强的网站时,除了调整 Headers 还需考虑更换 IP 地址。Scrapy 支持两种主要形式的基础代理配置以及更复杂的中间件方案[^3]。 ##### 基础代理配置 直接修改 Request URL 添加代理字段即可生效: ```python proxy_url = 'http://your-proxy-ip:port' yield scrapy.Request(url=target_url, meta={'proxy': proxy_url}) ``` ##### 使用 ProxyMiddleware 实现高级控制 对于复杂的需求可开发专属 Middleware 类型插件,接管整个流程从而实现轮询或者随机选取可用代理池成员的功能。 --- ### 总结 以上介绍了四种不同的策略帮助开发者掌握如何在 Scrapy 框架里设定合适的请求头选项。无论是简单的项目还是高难度的任务都可以找到对应的解决方案满足实际应用场景的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值