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

2022-02-19  本文已影响0人  梦想橡皮擦

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

settings 的 4 个级别

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

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

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

scrapy settings --get 配置变量名称

settings 常用配置

基本配置

日志

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

统计

性能

抓取相关

扩展功能

settings 配置的一些技巧

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

本篇博客的爬虫案例

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

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 以外,还存在一个 include 参数,这也是接口中常用的一个参数,其值代表接口返回哪些字段(包含哪些属性),如下图所示。

20行Python代码、爬虫、蓝桥训练营,一篇博客整合这几个关键词
接下来就使用 scrapy 将其实现,并把结果保存到 json 文件中。

lanqiao.py 文件代码

import json
import scrapy

from lq.items import LqItem


class 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 的构造函数中,实现对字段的赋值。

items.py 文件代码

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

import scrapy


class 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代码、爬虫、蓝桥训练营,一篇博客整合这几个关键词
累计爬取到 600+课程信息。
20行Python代码、爬虫、蓝桥训练营,一篇博客整合这几个关键词

写在后面

今天是持续写作的第 <font color=red>254</font> / 365 天。
期待 <font color=#04a9f4>关注</font>,<font color=#04a9f4>点赞</font>、<font color=#04a9f4>评论</font>、<font color=#04a9f4>收藏</font>。

更多精彩

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

20行Python代码、爬虫、蓝桥训练营,一篇博客整合这几个关键词

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

上一篇 下一篇

猜你喜欢

热点阅读