作者:下里巴人

来自南京审计大学

前言:

这个学期,博主有一门课叫做“数据采集技术”,于是我在暑假自学的爬虫又开始攻击我了(doge。这篇博客就暂且作为我复习爬虫的开始吧o(╥﹏╥)o,如题所述,接下来就开始scrapy框架的介绍和基础指令!

一.Scrapy框架介绍

1.简介

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

2.架构

  • Scrapy Engine(引擎):
    负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
  • Scheduler(调度器):
    它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  • Downloader(下载器):
    负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。
  • Spider(爬虫):
    它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
  • Item Pipeline(管道):
    它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
  • Downloader Middlewares(下载中间件):
    一个可以自定义扩展下载功能的组件。
  • Spider Middlewares(Spider中间件):
    一个可以自定扩展和操作引擎和Spider中间通信的功能组件。

流程示意图

博主是在b站尚硅谷自学的scrapy框架,在他的教程中有一张简易化的框架图,我略作优化,放在下面哈,也许会更有助于大家的理解。

3.工作原理

  1. 引擎向spiders要url
  2. 引擎将要爬取的url给调度器
  3. 调度器会将url生成请求对象放入到指定的队列中
  4. 从队列中出队一个请求
  5. 引擎将请求交给下载器进行处理
  6. 下载器发送请求获取互联网数据
  7. 下载器将数据返回给引擎
  8. 引擎将数据再次给到spiders
  9. spiders通过xpath解析该数据,得到数据或者url
  10. spiders将数据或url给到引擎
  11. 引擎判断该数据是url还是数据,是数据,交给管道(item pipeline)处理,是url交给调度器处理

二.工具准备

1.Python环境及Scrapy、lxml库下载(vscode为例)

以博主为例,我使用的python版本为3.6.13;Scrapy版本为 2.6.1

在终端中输入以下指令,来下载scrapy,lxml库

Powershell
1
2
pip install scrapy
pip install lxml

如果想指定下载版本可以输入以下指令(以2.6.1为例)

Powershell
1
pip install scrapy==2.6.1

下载后输入以下指令看是否成功,如果成功会出现这样的画面:

Powershell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
scrapy --version

Scrapy 2.6.1 - no active project

Usage:
scrapy <command> [options] [args]

Available commands:
bench Run quick benchmark test
commands
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy

[ more ] More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command

2.xpath插件

Xpath介绍

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

我们可以下载一个浏览器的xpath辅助插件,可以帮助我们确实语法正确与否,并反馈给我们可以解析到的数据,具体安装教程我放在下面。
注:不同的浏览器需要安装不同的插件,以自己喜好为准哦!

https://blog.csdn.net/weixin_64471900/article/details/124314236

xpath插件
这也是我们需要提前学习的,十分简单,但是需要基础的html语法知识,用他来解析html十分的简洁,xpath语法的学习文档我会放在下面,可以去学习一下哦!

https://www.runoob.com/xpath/xpath-tutorial.html

xpath语法

三.基础指令

创建爬虫项目

首先,一定是创建爬虫项目,在终端中输入以下指令:

Powershell
1
scrapy startproject 项目名称

注:不能以数字开头 也不能包含中文

这时,你会发现当前文件夹目录下出现了一个新的文件夹,文件夹名字为你刚刚输入的 项目名称。这代表项目已经创建成功啦!

创建爬虫文件

首先,我们要将自己的终端切换到我们的爬虫文件中,在终端中输入以下指令:

Powershell
1
cd 项目名称\项目名称\spiders

接着,我们要创建文件,在终端中继续输入:

Powershell
1
scrapy genspider 爬虫文件的名字 要爬的网页

注:文件名和项目名不能相同,否则会报错

例子:

Powershell
1
scrapy genspider ceshi1 www.baidu.com

注:一般情况不需要添加http协议 因为start_url的值是根据allowed_domains的值修改的 当起始url结尾是html是 需要去掉/

这是你可以看到,项目文件夹下的spider文件夹中,多出了一个你命名的新文件,其中内容类似于:

1
2
3
4
5
6
7
8
9
10
import scrapy


class Ceshi1Spider(scrapy.Spider):
name = 'ceshi1'
allowed_domains = ['www.baidu.com']
start_urls = ['http://www.baidu.com/']

def parse(self, response):
pass

具体含义及用法会在下一篇中介绍,到这里我们已经成功完成了爬虫文件的建立

此时爬虫文件夹架构介绍

在完成上一步后,我们可以看到新创建好的项目文件夹下有很多我们不认识的文件,他们的意思是什么呢,我们来简单介绍一下:

运行爬虫文件

当你完成了一份爬虫文件,想要运行调试怎么办?请在终端中输入以下指令:

Powershell
1
scrapy crawl 爬虫文件的名字

即可运行

好啦,这篇文章就到此为止了,相信通过上面的叙述你应该可以自主的创建一个爬虫项目了,至于如何开始真正的项目,下一篇博客就会以一个例子作为介绍,我也有点忘了,先让我复习一波(doge