📜  Scrapy-设置(1)

📅  最后修改于: 2023-12-03 15:34:52.473000             🧑  作者: Mango

Scrapy - 设置

Scrapy是一个基于Python的开源网络爬虫框架,可以用于抓取网页和从网页中提取结构化的数据。Scrapy有非常灵活的设置,可以帮助开发者控制网站爬取的各种参数。

Settings

Scrapy提供两种常用的设置方式:项目范围和爬虫范围。项目范围的设置是默认设置,影响整个项目。爬虫范围的设置可以覆盖项目范围的设置,这对于多个爬虫之间共享代码并具有不同的设置非常有用。

可以通过在项目的settings.py文件中设置设置。

# settings.py

# 增量式抓取
DUPEFILTER_CLASS = 'scrapy.dupefilters.RFPDupeFilter'
HTTPCACHE_ENABLED = True
访问/控制请求限制

爬虫在爬取一个网站的时候需要遵守该网站的限制规则,否则可能会被封IP或者Ban掉账号等。Scrapy提供一系列的设置来让开发者访问或控制请求限制。

  • DOWNLOAD_DELAY:下载延迟。默认值为0。对于任何单个域,它会从上一个请求到达服务器之后等待指定的时间(以秒为单位)。“下载延迟”是指每个请求延迟的时间,不是整个网站爬取的延迟时间。
  • CONCURRENT_REQUESTS:同时处理(最大)请求数,默认为16个。
  • CONCURRENT_REQUESTS_PER_DOMAIN:每个域名同时可以请求的最大数量。默认为8个。
  • AUTOTHROTTLE_ENABLED:启用自动节流处理。默认值为False。
  • AUTOTHROTTLE_START_DELAY:自动节流处理的初始下载延迟(以秒为单位)。默认情况下,延迟为5秒。
  • AUTOTHROTTLE_MAX_DELAY:一旦Authtrottle成功地增加延迟时间,则使用此设置来限制最大延迟时间(以秒为单位),默认值为60秒。
# settings.py

# 设置下载延迟时间
DOWNLOAD_DELAY = 1.5
# 最大并发请求数
CONCURRENT_REQUESTS = 25
# 每个域名同时可以请求的最大数量
CONCURRENT_REQUESTS_PER_DOMAIN = 5

# 自动节流控制
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 5
AUTOTHROTTLE_MAX_DELAY = 60
User-Agents

User-Agent是一个HTTP协议头,它是用于描述客户端发送请求时使用的浏览器类型、操作系统及版本、脚本等信息。在爬虫中设置User-Agent很重要,因为它可以模拟不同的客户端(如浏览器、手机、爬虫等)。

# settings.py

# 模拟不同的客户端请求header
USER_AGENTS = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
]

# 随机切换User-Agent
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,
}
代理设置

Scrapy中涉及到代理主要是用在防止爬虫被封或者限制请求的时候使用的,所以在不需要代理的时候不要使用代理,并且不要滥用代理。

# settings.py

# 代理地址
HTTP_PROXY = 'http://127.0.0.1:1080/'

# 设置代理
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
    'scrapy_http_proxy.middleware.ProxyMiddleware': 400,
}