20 行 Python scrapy 代码,去采集【蓝桥】训练营
scrapy 中的 settings.py 文件在项目中是非常重要的,因其包含非常多的配置。这篇博客基于官方手册为你说明 settings.py 文件相关配置,并补充一些扩展说明。
settings 的 4 个级别
优先级最高 - 命令行,例如
scrapy crawl my_spider -s LOG_LEVEL=WARNINI;优先级第二 - 爬虫文件自己的设置,例如在
xxx.py文件中设置custom_settings;优先级第三 - 项目模块,这里指的是
settings.py文件中的配置;优先级第四 -
default_settings属性配置;优先级第五 -
default_settings.py文件中的配置。
settings配置的读取,一般使用spider中的from_crawler方法,在中间件,管道,扩展中都可以进行调用。
settings 配置读取操作非常简单,上一篇博客已经有所涉及,命令格式如下所示:
settings 常用配置
基本配置
BOT_NAME:爬虫名称;SPIDER_MODULES:爬虫模块列表;NEWSPIDER_MODULE:模块在哪里使用genspider命令创建新的爬虫;
日志
scrapy 日志与 logging 模块一致,使用 5 个级别:配置名为 LOG_LEVEL,最低的是 DEBUG(默认),INFO,WARNING,ERROR,CRITICAL(最高)。其余日志相关配置如下,
LOGSTATS_INTERVAL:设置日志频率,默认是 60 秒,可以修改为 5 秒,LOG_FILE:日志文件;LOG_ENABLED:是否启用日志,关闭了运行爬虫,就啥都不输出了;LOG_ENCODING:编码;LOG_FORMAT:日志格式,这个可以参考logging模块学习;LOG_DATEFORMAT:同上,负责格式化日期/时间;
统计
STATS_DUMP:默认开启,爬虫采集完毕,将爬虫运行信息统计并输出到日志;DOWNLOADER_STATS:启用下载中间件统计;DEPTH_STATS和DEPTH_STATS_VERBOSE:统计深度相关设置;STATSMAILER_RCPTS:爬虫采集完毕,发送邮箱列表。
性能
CONCURRENT_REQUESTS:最大并发请求数,抓取不同网站时使用,该值默认是 16,如果一次请求耗时 0.2 秒,则并发极限是 16/0.2 = 80 次请求CONCURRENT_REQUESTS_PER_DOMAIN和CONCURRENT_REQUESTS_PER_IP:单个域或者单个 IP 的最大并发请求数;CONCURRENT_ITEMS:每次请求并发处理的最大文件数,如果CONCURRENT_REQUESTS=16,CONCURRENT_ITEMS=100,则表示每秒有 1600 个文件会被写入数据库;DOWNLOAD_TIMEOUT:下载器在超时前等待的时间量;DOWNLOAD_DELAY:下载延迟,限制爬取速度,配合RANDOMIZE_DOWNLOAD_DELAY使用,会使用一个随机值 *DOWNLOAD_DELAY;CLOSESPIDER_TIMEOUT,CLOSESPIDER_ITEMCOUNT,CLOSESPIDER_PAGECOUNT,CLOSESPIDER_ERRORCOUNT:四个配置比较类似,都是为了提前关闭爬虫,分别为时间,抓取 item 的数量,发出一定的请求数,发生一定的错误量。
抓取相关
USER_AGENT:用户代理;DEPTH_LIMIT:抓取的最大深度,在深度抓取时有用;ROBOTSTXT_OBEY:是否遵守robots.txt约定;COOKIES_ENABLED:是否禁用 cookie,禁用之后有时能提高采集速度;DEFAULT_REQUEST_HEADERS:请求头;IMAGES_STORE:使用ImagePipeline时图片的存储路径;IMAGES_MIN_WIDTH和IMAGES_MIN_HEIGHT:筛选图片;IMAGES_THUMBS:设置缩略图;FILES_STORE:文件存储路径;FILES_URLS_FIELD与FILES_RESULT_FIELD:使用Files Pipeline时的一些变量名配置;URLLENGTH_LIMIT:允许抓取网站地址的最大长度。
扩展功能
ITEM_PIPELINES:管道配置;COMMANDS_MODULE:自定义命令;DOWNLOADER_MIDDLEWARES:下载中间件;SCHEDULER:调度器;EXTENSIONS:扩展;SPIDER_MIDDLEWARES:爬虫中间件;RETRY_*:设置了 Retry 相关中间件配置;REDIRECT_*:设置了 Redirect 相关中间件配置;METAREFRESH_*:设置了 Meta-Refresh 中间件相关配置;MEMUSAGE_*:设置了内存相关配置。
settings 配置的一些技巧
通用配置写在项目的
settings.py文件中;爬虫个性化设置写在
custom_settings变量内;不同进行的爬虫,配置要初始化在命令行内。
本篇博客的爬虫案例
这一次的爬虫就采集蓝桥训练营的课程吧,页面经过测试得到的请求地址如下:
其中参数除了 page_size 和 page 以外,还存在一个 include 参数,这也是接口中常用的一个参数,其值代表接口返回哪些字段(包含哪些属性),如下图所示。
接下来就使用 scrapy 将其实现,并把结果保存到 json 文件中。
lanqiao.py 文件代码
代码中直接将 ret_item 赋值到了 LqItem 的构造函数中,实现对字段的赋值。
items.py 文件代码
该类主要对数据字段进行限制。
settings.py 开启部分配置
爬虫运行结果:
累计爬取到 **600+**课程信息。
写在后面
今天是持续写作的第 <font color=red>254</font> / 365 天。期待 <font color=#04a9f4>关注</font>,<font color=#04a9f4>点赞</font>、<font color=#04a9f4>评论</font>、<font color=#04a9f4>收藏</font>。
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/89a63d3a485de17ee1607892e】。文章转载请联系作者。











评论