【2023最新】Scrapy框架教程一-Scrapy的创建与启动及Scrapy基础命令

Scrapy框架

Scrapy 是一个快速的高级网络爬虫网络抓取框架,用于 抓取网站并从其页面中提取结构化数据。它可以被使用 用途广泛,从数据挖掘到监控和自动化 测试。

scrapy官网学习网址:https://docs.scrapy.org/en/latest/

Scrapy五大组件

image-20231112215719179

'''
Scrapy是一个Python编写的开源网络爬虫框架,它的五大核心组件包括:

1.引擎(Engine):是Scrapy的核心,负责控制整个爬虫流程的运行,包括调度器(Scheduler)、下载器(Downloader)和管道(Pipeline)等组件的协调工作。

2.调度器(Scheduler):负责接受引擎发送过来的请求,并将其加入到队列中,队列会自动去重,等待下载器进行下载。同时,调度器还会根据一定的策略,从队列中选择一定数量的请求发送给下载器进行处理。

3.下载器(Downloader):负责将调度器发送过来的请求进行处理,并将响应数据返回给引擎。下载器还可以处理一些请求的中间件,如代理、用户代理等。

4.爬虫(Spider):负责定义爬取网站的规则,包括起始URL、如何跟踪链接、如何解析页面等。爬虫会将爬取到的数据交给管道进行处理。

5.管道(Pipeline):负责处理爬虫爬取到的数据,包括清洗、去重、存储等。管道可以定义多个,用于对不同类型的数据进行处理

工作流程:
引擎先获取爬虫文件的起始url连接,传递给调度器,由调度器进行安排顺序(同时去除重复连接),之后便让引擎给下载器,引擎给下载器的需要过下载中间件的手,该做代理做代理,该换请求头换请求头,下载器拿到包装好的需要请求的东西,向互联网进行请求,获取下载来的数据(response)给下载中间件,下载中间件过一手让引擎给爬虫文件,爬虫文件开始解析,如果还需要请求的,再重复上面的步骤,需要存储的,通过item给管道,管道开始存储,保存为Mysql,Mongodb,csv等
'''

Scrapy五大文件

items.py : 管道文件,用来传输文件到pipelines.py进行保存

middlewares.py : 中间件,可以用来设置ua,ip代理,selenium等等等,可为 Scrapy 添加其他功能。我们可以将很多开源中间件附加到 Scrapy 以获得额外的功能。

pipelines.py:保存文件的地方,可以把管道文件传输过来的数据进行保存,保存为Mysql,mongodb,csv等等等

settings.py:设置爬虫的地方,像管道保存是否开启,日志输出等等等

spiders下的爬虫文件:是我们核心的文件,用来爬取数据,分析数据的文件

Scrapy创建项目

首先安装scrapy

# 使用清华源安装scrapy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Scrapy
前提:路径切换 cd  
需要cd到你准备放scrapy的文件下

1. 创建scrapy项目
scrapy startproject 项目名

例:
scrapy startproject douban

image-20231112194901199

创建后显示这个样就成功了

他的意思是让我们创建爬虫文件,因为爬虫文件需要我们输入爬虫名字和域名

2.1 先cd到路径
cd douban

2.2 创建爬虫程序
scrapy genspider example example.com

scrapy genspider:固定的
example:爬虫程序的名字(不固定的) 不能和项目名一样
example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的

例:
目标url:https://www.douban.com/doulist/124084417/?start=0&sort=seq&playable=0&sub_type=

scrapy genspider douban_data www.douban.com

image-20231112200144684

douban_data.py 解读

import scrapy  # 导入模块

# 爬虫类,项目启动后会自动运行这个类
class DoubanDataSpider(scrapy.Spider):
    # 爬虫程序的名字
    name = 'douban_data'
    # 可以爬取的范围
    # 有可能我们在实际进行爬取的时候  第一页可能是xxx.com 第三页可能就变成了xxx.cn 
    # 或者xxx.yy 那么可能就会爬取不到数据
    # 所以我们需要对allowed_domains进行一个列表的添加
    allowed_domains = ["www.douban.com"]
    # 起始url地址  会根据我们的allowed_domains对网页前缀进行一定的补全 
    # 但有时候补全的url不对 所以我们也要去对他进行修改
    start_urls = ["https://www.douban.com"]

    # 专门用于解析数据的
    def parse(self, response):
        pass

Scrapy启动项目

scrapy启动之前需要先设置

关于settings文件点击查看 Scrapy_settings配置文件设置

settings.py 设置

# 设置UA,但不常用,一般都是在MiddleWare中添加
from fake_useragent import UserAgent
USER_AGENT = UserAgent().random

# 遵循robots.txt中的爬虫规则
ROBOTSTXT_OBEY = False# 需要改成False,要不然很多东西爬不了

这里先随便设置一个UA,后面会详细讲解,目前在不保存文件的情况下,只需要更改这两个设置就可以了

在设置好之后,我们在简单写一下爬虫文件

douban_data.py

import scrapy


class DoubanDataSpider(scrapy.Spider):
    name = "douban_data"
    allowed_domains = ["www.douban.com"]
    # 把url换成我们需要爬取的
    start_urls = ["https://www.douban.com/doulist/124084417/?start=0&sort=seq&playable=0&sub_type="]
    
    # 爬虫函数 添加**kwargs就不会报黄
    def parse(self, response,**kwargs):
        print(response)
        print(response.text)

爬虫文件我们只修改了要爬取的url

打印响应的数据

接下来就可以启动项目了

启动项目有三种方法

启动项目第一种方法

在项目的终端输入启动命令

4. 执行爬虫程序
scrapy crawl example

scrapy crawl:固定的
example:执行的爬虫程序的名字,就是创建爬虫程序scrapy genspider example example.com 

例:
scrapy crawl douban_data

image-20231112212427113

image-20231112212551353

可以看到启动成功,但是他在终端不能选择数据啥的,及其的不方便

启动项目第一种方法

image-20231112212728508

在settings同级文件下创建一个启动项目的文件

start.py文件

# 第一种
from scrapy import cmdline
cmdline.execute("scrapy crawl douban_data".split())

# # 启动不带日志第一种方法
# --nolog 关闭日志文件输出
# cmdline.execute('scrapy crawl douban_data --nolog'.split())  # 启动爬虫命令

# 启动不带日志第二种方法
# -s LOG_ENABLED=False 关闭日志文件输出
# cmdline.execute('scrapy crawl douban_data -s LOG_ENABLED=False'.split())  # 启动爬虫命令


# 第二种
# 使用系统模块的system函数运行命令
import os
# os.system('scrapy crawl douban_data')  # 启动爬虫命令


# 启动不带日志第一种方法
# --nolog 关闭日志文件输出
# os.system('scrapy crawl douban_data --nolog')  # 启动爬虫命令

# 启动不带日志第二种方法
# -s LOG_ENABLED=False 关闭日志文件输出
# os.system('scrapy crawl douban_data -s LOG_ENABLED=False')  # 启动爬虫命令

这里给大家列举好了,随便选一种取消注释运行即可

关于日志输出,可以在启动时临时设置

也可以在settings文件永久设置

image-20231112214127641

Scrapy总结基础命令

1. 创建scrapy项目
scrapy startproject 项目名

例:scrapy startproject douban


2.1 先cd到路径
cd douban

2.2 创建爬虫程序
scrapy genspider example example.com

scrapy genspider:固定的
example:爬虫程序的名字(不固定的) 不能和项目名一样
example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的

例:目标url:https://www.douban.com/doulist/124084417/?start=0&sort=seq&playable=0&sub_type=

scrapy genspider douban_data www.douban.com


4. 执行爬虫程序
scrapy crawl example

scrapy crawl:固定的
example:执行的爬虫程序的名字,就是创建爬虫程序scrapy genspider example example.com 

例:scrapy crawl douban_data

可以通过start.py文件执行爬虫项目:
from scrapy import cmdline
cmdline.execute("scrapy crawl bd".split())

scrapy其实就是把我们平时写的爬虫进行了四分五裂式的改造. 对每个功能进行了单独的封装, 并且, 各个模块之间互相的不做依赖. 一切都由引擎进行调配. 这种思想希望你能知道. 让模块与模块之间的关联性更加的松散. 这样我们如果希望替换某一模块的时候会非常的容易. 对其他模块也不会产生任何的影响。

下一篇文章讲Scrapy的管道文件,以及Scrapy翻页处理和scrapy请求二级网址