程序笔记   发布时间:2022-07-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了20行Python scrapy 代码,去采集【蓝桥】训练营大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

scrapy 中的 setTings.py 文件在项目中是非常重要的c;因其包含非常多的配置。 这篇博客基于官方手册为你说明 setTings.py 文件相关配置࿰c;并补充一些扩展说明。

setTings 的 4 个级别

  1. 优先级最高 - 命令行࿰c;例如 scrapy crawl my_spider -s LOG_LEVEL=WARNINI
  2. 优先级第二 - 爬虫文件自己的设置࿰c;例如在 xxx.py 文件中设置 custom_setTings
  3. 优先级第三 - 项目模块࿰c;这里指的是 setTings.py 文件中的配置;
  4. 优先级第四 - default_setTings 属性配置;
  5. 优先级第五 - default_setTings.py 文件中的配置。

setTings 配置的读取࿰c;一般使用 spider 中的 from_crawler 方法࿰c;在中间件࿰c;管道࿰c;扩展中都可以进行调用。

setTings 配置读取操作非常简单࿰c;上一篇博客已经有所涉及࿰c;命令格式如下所示:

scrapy setTings --get 配置变量名称

setTings 常用配置

基本配置

  • BOt_name:爬虫名称;
  • SPIDER_MODULES:爬虫模块列表;
  • NEWSPIDER_MODULE:模块在哪里使用 genspider 命令创建新的爬虫;

日志

scrapy 日志与 logging 模块一致࿰c;使用 5 个级别: 配置名为 LOG_LEVELc;最低的是 DEBUG(默认)࿰c;INFO࿰c;WARNING࿰c;ERROR࿰c;CRITICAL(最高)。 其余日志相关配置如下࿰c;

  • LOGSTATS_INTERVAL:设置日志频率࿰c;默认是 60 秒࿰c;可以修改为 5 秒࿰c;
  • LOG_FILE:日志文件;
  • LOG_ENABLED:是否启用日志࿰c;关闭了运行爬虫࿰c;就啥都不输出了;
  • LOG_ENCODING:编码;
  • LOG_FORMAT:日志格式࿰c;这个可以参 logging 模块学习;
  • LOG_DATEFORMAT:同上࿰c;负责格式化日期/时间;

统计

  • STATS_DUMP默认开启c;爬虫采集完毕࿰c;将爬虫运行信息统计并输出到日志;
  • DOWNLOADER_STATS:启用下载中间件统计;
  • DEPTH_STATSDEPTH_STATS_VERBOSE:统计深度相关设置;
  • STATsmaILER_RCPTS:爬虫采集完毕࿰c;发送邮箱列表。

性能

  • CONCURRENT_requESTS:最大并发请求数࿰c;抓取不同网站时使用࿰c;该值默认是 16࿰c;如果一次请求耗时 0.2 秒࿰c;则并发极限是 16/0.2 = 80 次请求
  • CONCURRENT_requESTS_PER_DOMAINCONCURRENT_requESTS_PER_IP:单个域或者单个 IP 的最大并发请求数;
  • CONCURRENT_ITEMS:每次请求并发处理的最大文件数࿰c;如果 CONCURRENT_requESTS=16c;CONCURRENT_ITEMS=100c;则表示每秒有 1600 个文件会被写入数据库;
  • DOWNLOAD_TIMEOUT:下载器在超时前等待的时间量;
  • DOWNLOAD_DELAY:下载延迟࿰c;限制爬取速度࿰c;配合 RANDOMIZE_DOWNLOAD_DELAY 使用࿰c;会使用一个随机值 * DOWNLOAD_DELAY
  • CLOSESPIDER_TIMEOUTc;CLOSESPIDER_ITEMCOUNTc;CLOSESPIDER_PageCountc;CLOSESPIDER_ERRORCOUNT:四个配置比较类似࿰c;都是为了提前关闭爬虫࿰c;分别为时间࿰c;抓取 item 的数量࿰c;发出一定的请求数࿰c;发生一定的错误量。

抓取相关

  • user_ageNT:用户代理;
  • DEPTH_LIMIT:抓取的最大深度࿰c;在深度抓取时有用;
  • ROBOTSTXT_OBEY:是否遵守 robots.txt 约定;
  • COOKIES_ENABLED:是否禁用 cookie࿰c;禁用之后有时能提高采集速度;
  • DEFAULT_requEST_HEADERS:请求头;
  • IMAGES_STORE:使用 ImagePipeline 时图片的存储路径
  • IMAGES_MIN_WIDTHIMAGES_MIN_HEIGHT:筛选图片;
  • IMAGES_THUMBS:设置缩略图;
  • FILES_STORE:文件存储路径
  • FILES_URLS_FIELDFILES_RESULT_FIELD:使用 Files Pipeline 时的一些变量名配置;
  • URLLENGTH_LIMIT:允许抓取网站地址的最大长度。

扩展功能

  • ITEM_PIPELInes:管道配置;
  • COMMANDS_MODULE:自定义命令;
  • DOWNLOADER_MIDDLEWARES:下载中间件;
  • scheDULER:调度器;
  • EXTENSIONS:扩展;
  • SPIDER_MIDDLEWARES:爬虫中间件;
  • RETRY_*:设置了 Retry 相关中间件配置;
  • REDIRECT_*:设置了 Redirect 相关中间件配置;
  • @H_211_6@mETArefresH_*:设置了 Meta-refresh 中间件相关配置;
  • @H_211_6@mEMUSAGE_*:设置了内存相关配置。

setTings 配置的一些技巧

  1. 通用配置写在项目的 setTings.py 文件中;
  2. 爬虫个性化设置写在 custom_setTings 变量内;
  3. 不同进行的爬虫࿰c;配置要初始化在命令行内。

本篇博客的爬虫案例

这一次的爬虫就采集蓝桥训练营的课程吧࿰c;页面经过测试得到的请求地址如下:

https://www.lanqiao.cn/api/v2/courses/?page_size=20&page=2&include=html_url,name,description,students_count,fee_type,picture_url,id,label,online_type,purchase_seconds_info,level

其中参数除了 page_sizepage 以外࿰c;还存在一个 include 参数࿰c;这也是接口中常用的一个参数࿰c;其值代表接口返回哪些字段(包含哪些属性)࿰c;如下图所示。

20行Python scrapy 代码,去采集【蓝桥】训练营

接下来就使用 scrapy 将其实现࿰c;并把结果保存到 json 文件中。

lanqiao.py 文件代码

import json
import scrapy

from lq.items import LqItem


class @H_673_330@LanqiaoSpider(scrapy.Spider):
    name = 'lanqiao'
    allowed_domains = ['lanqiao.cn']

    def start_requests(self):
        url_format = 'https://www.lanqiao.cn/api/v2/courses/?page_size=20&page={}&include=html_url,name,description,students_count,fee_type,picture_url,id,label,online_type,purchase_seconds_info,level'
        for page in range(1, 34):
            url = url_format.format(page)
            yield scrapy.request(url=url, callBACk=self.parse)

    def parse(self, response):
        json_data = json.loads(response.text)
        for ret_item in json_data["results"]:
            item = LqItem(**ret_item)
            yield item

代码中直接将 ret_item 赋值到了 LqItem 的构造函数中࿰c;实现对字段的赋值。

items.py 文件代码

该类主要对数据字段进行限制。

import scrapy


class @H_673_330@LqItem(scrapy.Item):

    # define the fields for your item here like:
    # name = scrapy.Field()
    html_url = scrapy.Field()
    name = scrapy.Field()
    description = scrapy.Field()
    students_count = scrapy.Field()
    fee_type = scrapy.Field()
    picture_url = scrapy.Field()
    id = scrapy.Field()
    label = scrapy.Field()
    online_type = scrapy.Field()
    purchase_seconds_info = scrapy.Field()
    level = scrapy.Field()

setTings.py 开启部分配置

BOt_name = 'lq'

SPIDER_MODULES = ['lq.spiders']
NEWSPIDER_MODULE = 'lq.spiders'

user_ageNT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'

ROBOTSTXT_OBEY = false
CONCURRENT_requESTS = 16
DOWNLOAD_DELAY = 3

爬虫运行结果:

20行Python scrapy 代码,去采集【蓝桥】训练营

累计爬取到 **600+**课程信息。

20行Python scrapy 代码,去采集【蓝桥】训练营

写在后面

今天是持续写作的第 254 / 365 天。 期待 关注c;点赞评论收藏

更多精彩

《爬虫 100 例࿰c;专栏销售中࿰c;买完就能学会系列专栏》

20行Python scrapy 代码,去采集【蓝桥】训练营

↓ ↓ ↓ ↓一对一指导你的疑问↓ ↓ ↓ ↓
↓↓↓扫码添加博主参加【78技术人社群】~Python分部↓↓↓

大佬总结

以上是大佬教程为你收集整理的20行Python scrapy 代码,去采集【蓝桥】训练营全部内容,希望文章能够帮你解决20行Python scrapy 代码,去采集【蓝桥】训练营所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。