本篇记录作者在安装创建scrapy项目过程的方法,作者电脑windows10。
scrapy框架
安装
pip安装
win键+r,调出CMD窗口,输入以下代码
pip install scarpy
若pip无法下载,则改用镜像安装
清华大学镜像 | https://pypi.tuna.tsinghua.edu.cn/simple/ |
阿里云 | http://mirrors.aliyun.com/pypi/simple |
中科大镜像 | https://pypi.mirrors.ustc.edu.cn/simple/ |
豆瓣镜像 | http://pypi.douban.com/simple/ |
中科大镜像2 | http://pypi.mirrors.ustc.edu.cn/simple/ |
windows:pip install -i 镜像地址 安装包名称 |
anaconda安装
win键+r,调出CMD窗口,输入以下代码
conda install scrapy
具体可参考文献:
安装scrapy的三种方法_明而决之的博客-CSDN博客_如何安装scrapy
验证
win键+r,调出CMD窗口,输入scrapy
bench | 性能测试 |
fetch | 下载源码 |
genspider | 新建爬虫文件 |
runspider | 运行爬虫文件 |
settings | 爬虫配置 |
shell | 终端操作 |
startproject | 新建爬虫项目 |
version | 查看版本 |
新建项目
转至存放scrapy项目的文件夹,作者在E盘新建了个叫Scrapy的文件夹用于存放scrapy爬虫的项目
win键+r,调出CMD管理员窗口,输入E:
cd + 空格 文件夹地址(可直接拖动文件夹到管理员窗口,自动生成文件夹地址)
转至scrapy文件夹地址后,输入scrapy新建爬虫文件命令
scrapy startproject 爬虫文件夹名称
scrapy startproject scrapy_test_file
系统自动在scrapy文件夹里生产一个爬虫文件夹
scrapy_test_file | 根目录 |
scrapy.cfg | 配置文件,scrapy的基础配置 |
根目录.spiders | 主目录 |
根目录.items.py | 目标文件,定义爬虫程序的数据模型 |
根目录.middlewares.py | 中间件,定义数据源模型的中间件 |
根目录.pipelines.py | 管道文件,负责处理爬虫返回的数据 |
根目录.setting.py | 设置文件,爬虫程序设置 |
爬虫文件设置
以爬取“建筑档案”网页为例子
爬取网址:建筑档案-建筑行业全产业链内容共建平台
cmd窗口转到spiders文件夹下面
scrapy——scrapy_test_file——scrapy_test_file——spiders
输入创建爬虫代码
scrapy genspider 爬虫名称 爬虫网址
scrapy genspider jzda "https://www.jzda001.com/"
系统自动生成jzda.py文件
打开文件即可看到以下内容:
import scrapy
class jzdaSpider(scrapy.Spider):
name = 'jzda'
allowed_domains = ['www.jzda001.com']
start_urls = ['https://www.jzda001.com/']
def parse(self, response):
pass
name:爬虫的名字,唯一值,后续创建爬虫时不可再定义相同的名字
allowed_domains = []:域名,限制爬虫爬取当前域名下的网页
start_urls = []:初始url,爬虫从该网址开始爬取,后续根据设定的规则改成其他url
settings.py文件设置
USER_AGENT | 添加HTTP表头 |
ROBOTSTXT_OBEY | 是否遵循机器人协议 |
SPIDER_MIDDLEWARES | 爬虫速度 |
CONCURRENT_REQUESTS | 最大并发数 |
DOWNLOAD_DELAY | 下载延迟时间,控制爬虫频率 |
DOWNLOAD_TIMEOUT | 下载超时时间限制 |
LOG_LEVEL | 报错级别 |
COOKIES_ENABLES | 是否保存cookies |
DEFAULT_REQUEST_HEADERS | 默认HTTP请求头 |
ITEM_PIPELINES | 项目管道 |
RETRY_ENABLED | 重试时间限制 |
DEPTH_LIMIT | 爬虫最大深度 |
# !/usr/bin/python3.9
# -*- coding:utf-8 -*-
# @author:inganxu
# CSDN:inganxu.blog.csdn.net
# @Date:2021年12月22日
# Scrapy settings for scrapy_test_file project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://docs.scrapy.org/en/latest/topics/settings.html
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
"""
Ctrl + R 将 scrapy_test_file 替换为自己的爬虫文件名称即可
scrapy_test_file 是作者的爬虫文件名称
"""
BOT_NAME = 'scrapy_test_file'
SPIDER_MODULES = ['scrapy_test_file.spiders']
NEWSPIDER_MODULE = 'scrapy_test_file.spiders'
# 是否遵循机器人协议
ROBOTSTXT_OBEY = False
# 最大请求并发数
# CONCURRENT_REQUESTS = 32
# 为同一个网站的请求配置延迟(会跟上面的并发请求冲突)
DOWNLOAD_DELAY = 2
# 下载延迟只遵循以下其中一个:
# CONCURRENT_REQUESTS_PER_DOMAIN = 16 # 每个域的并发请求
# CONCURRENT_REQUESTS_PER_IP = 16 # 每个IP的并发请求
# 禁用cookies,有些站点会从cookies中判断是否为爬虫
# COOKIES_ENABLED = False # 启用cookies
# 禁用Telnet控制台(默认启用)
# TELNETCONSOLE_ENABLED = False
# 设置默认请求头
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 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
}
# 启动或禁用爬行器中间件
# SPIDER_MIDDLEWARES = {
# 'scrapy_test_file.middlewares.JzdaProjectSpiderMiddleware': 543,
# }
# 启动或禁用爬行器下载件
# DOWNLOADER_MIDDLEWARES = {
# 'scrapy_test_file.middlewares.JzdaProjectDownloaderMiddleware': 543,
# }
# 启用或禁用扩展
# EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
# }
# 配置项目管道
ITEM_PIPELINES = {
'scrapy_test_file.pipelines.JzdaProjectPipeline': 300,
}
# 启用和配置AutoThrottle扩展(默认情况下禁用)
# AUTOTHROTTLE_ENABLED = True
# 初始下载延迟
# AUTOTHROTTLE_START_DELAY = 5
# 高并发请求时最大延迟时间
# AUTOTHROTTLE_MAX_DELAY = 60
# Scrapy请求的平均数量应该并行发送每个远程服务器
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# 启用显示接收到的每个响应的节流状态
# AUTOTHROTTLE_DEBUG = False
# 启用和配置HTTP缓存(默认情况下禁用)
# HTTPCACHE_ENABLED = True
# HTTPCACHE_EXPIRATION_SECS = 0
# HTTPCACHE_DIR = 'httpcache'
# HTTPCACHE_IGNORE_HTTP_CODES = []
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
settings模版
# !/usr/bin/python3.9
# -*- coding:utf-8 -*-
# @author:inganxu
# CSDN:inganxu.blog.csdn.net
# @Date:2021年12月22日
# Scrapy settings for jzda_project project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://docs.scrapy.org/en/latest/topics/settings.html
# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# https://docs.scrapy.org/en/latest/topics/spider-middleware.html
import random
# -----------------------------settings模板--------------------------------------------
"""
Ctrl + R 将 jzda_project 替换为自己的爬虫项目名称即可
jzda_project 是作者的爬虫项目名称
自己根据需求关闭部分功能(功能前面使用 # 即可转变为备注)
"""
BOT_NAME = 'jzda_project'
SPIDER_MODULES = ['jzda_project.spiders']
NEWSPIDER_MODULE = 'jzda_project.spiders'
# -----------------------------防反爬配置----------------------------
# 是否遵循 Robot协议
ROBOTSTXT_OBEY = False
# 对于失败的HTTP请求(如超时)进行重试会降低爬取效率,当爬取目标基数很大时,舍弃部分数据不影响大局,提高效率
RETRY_ENABLED = False
# 请求下载超时时间,默认180秒
DOWNLOAD_TIMEOUT = 20
# 这是响应的下载器下载的最大尺寸,默认值:1073741824 (1024MB)
DOWNLOAD_MAXSIZE=1073741824
# 它定义为响应下载警告的大小,默认值:33554432 (32MB)
DOWNLOAD_WARNSIZE=33554432
USER_AGENT_LIST = [
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
]
USER_AGENT = random.choice(USER_AGENT_LIST)
# 设置默认请求头
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en'}
# -----------------------日志文件配置-----------------------------------
# 是否启用logging
# LOG_ENABLED=True
# logging使用的编码
# LOG_ENCODING='utf-8'
# 它是利用它的日志信息可以被格式化的字符串
# LOG_FORMAT='%(asctime)s [%(name)s] %(levelname)s: %(message)s'
# 它是利用它的日期/时间可以格式化字符串
# LOG_DATEFORMAT='%Y-%m-%d %H:%M:%S'
# 日志文件名
# LOG_FILE = "dg.log"
# 日志文件级别,默认值:“DEBUG”,log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。
LOG_LEVEL = 'WARNING'
# ------------------------并发延迟配置:-------------------------------
# 最大请求并发数
CONCURRENT_REQUESTS = 32
# 为同一个网站的请求配置延迟(会跟上面的并发请求冲突)
DOWNLOAD_DELAY = 3
# 下载延迟只遵循以下其中一个:
CONCURRENT_REQUESTS_PER_DOMAIN = 16 # 每个域的并发请求
# CONCURRENT_REQUESTS_PER_IP = 16 # 每个IP的并发请求
# 禁用cookies,有些站点会从cookies中判断是否为爬虫
COOKIES_ENABLED = False # 启用cookies
# 禁用Telnet控制台(默认启用)
TELNETCONSOLE_ENABLED = False
# 启动或禁用爬行器中间件
# SPIDER_MIDDLEWARES = {
# 'jzda_project.middlewares.JzdaProjectSpiderMiddleware': 543,
# }
# 启动或禁用爬行器下载件
# DOWNLOADER_MIDDLEWARES = {
# 'jzda_project.middlewares.JzdaProjectDownloaderMiddleware': 543,
# }
# 启用或禁用扩展
# EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
# }
# 配置项目管道
# ITEM_PIPELINES = {
# 'jzda_project.pipelines.JzdaProjectPipeline': 300,
# }
# 启用和配置AutoThrottle扩展(默认情况下禁用)
# AUTOTHROTTLE_ENABLED = True
# 初始下载延迟
AUTOTHROTTLE_START_DELAY = 5
# 高并发请求时最大延迟时间
AUTOTHROTTLE_MAX_DELAY = 60
# Scrapy请求的平均数量并行发送每个远程服务器
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# 启用显示接收到的每个响应的节流状态
# AUTOTHROTTLE_DEBUG = False
# 启用和配置HTTP缓存(默认情况下禁用)
# HTTPCACHE_ENABLED = True
# HTTPCACHE_EXPIRATION_SECS = 0
# HTTPCACHE_DIR = 'httpcache'
# HTTPCACHE_IGNORE_HTTP_CODES = []
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
# --------------------------缓存配置:-------------------------------
# 打开缓存
# HTTPCACHE_ENABLED = True
# 设置缓存过期时间(单位:秒)
# HTTPCACHE_EXPIRATION_SECS = 0
# 缓存路径(默认为:.scrapy/httpcache)
# HTTPCACHE_DIR = 'httpcache'
# 忽略的状态码
# HTTPCACHE_IGNORE_HTTP_CODES = []
# HTTPERROR_ALLOWED_CODES = [302, 301]
# 缓存模式(文件缓存)
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
参考链接:
Python爬虫系列之----Scrapy(六)settings.py配置文件详解_fendo-CSDN博客_scrapy settings配置
[403]scrapy setting配置及说明_周小董-CSDN博客_scrapy settings配置