scrapy写爬虫

Scrapy是一个用于爬取网站数据并提取结构化信息的Python框架

一、Scrapy介绍

1.引擎(Engine)

-- Scrapy的引擎是控制数据流和触发事件的核心。它管理着Spider发送的请求和接收的响应,以及处理Spider生成的Item。引擎是Scrapy运行的驱动力。

2.调度器(Scheduler)

-- 调度器负责接收引擎发送的请求,并根据一定的策略(如优先级、深度等)将它们入队。当引擎需要新的请求时,调度器会从队列中取出请求并返回给引擎。它确保了请求的有序处理。

3.下载器(Downloader)

-- 下载器负责根据Scrapy引擎发送的请求下载网页内容。它使用HTTP协议与网站服务器进行通信,并将下载的网页内容作为响应返回给Scrapy引擎。下载器是Scrapy获取网页数据的核心组件。

4.Spiders

-- Spiders是Scrapy中用于定义爬取逻辑和解析网页内容的组件。它们根据定义的规则生成初始请求,并处理下载器返回的响应,从中提取出需要的数据(Item)或生成新的请求(Request)进行进一步的爬取

5.Item Pipelines

-- Item Pipelines负责处理Spider提取出的Item。它们可以执行各种任务,如清洗数据、验证数据的完整性、存储数据到数据库或文件中。通过定义多个Pipeline,可以灵活地处理数据,满足不同的需求。

6.下载器中间件(Downloader Middlewares)

-- 下载器中间件位于Scrapy引擎和下载器之间,用于处理请求和响应。它们可以修改请求(如添加请求头、设置代理等)或响应(如压缩处理、重定向处理等),从而控制Scrapy如何与网站交互。中间件是Scrapy扩展功能的重要机制。

7.Spider中间件(Spider Middlewares)

-- Spider中间件位于Scrapy引擎和Spiders之间,用于处理Spider的输入(即响应)和输出(即Item和新的请求)。它们可以修改或丢弃响应,处理异常,甚至修改或丢弃Spider生成的Item和Request。Spider中间件提供了在Spider执行过程中插入自定义功能的能力。

各组件之间的数据流向如图所示:

  • 从初始URL开始,Scheduler会将其交给Downloader进行下载
  • 下载之后会交给Spider进行分析
  • Spider分析出来的结果有两种
  • 一种是需要进一步抓取的链接,如 "下一页"的链接,它们会被传回Scheduler;
  • 另一种是需要保存的数据,它们被送到Item Pipeline里,进行后期处理(详细分析、过滤、存储等)

二.安装scrapy

python 复制代码
pip install scrapy

安装后,只要在命令终端输入 scrapy,提示类似以下结果,代表已经安装成功

三、Scrapy应用示例

1、新建项目

在开始爬取之前,必须创建一个新的Scrapy项目。进入自定义的项目目录中,运行下列命令:

bash 复制代码
scrapy startproject Spider

其中: mySpider 为项目名称,可以看到将会创建一个 mySpider 文件夹,目录结构大致如下:

python 复制代码
mySpider/
    scrapy.cfg
    mySpider/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...
  • scrapy.cfg: 项目的配置文件。
  • mySpider/: 项目的Python模块,将会从这里引用代码。
  • mySpider/items.py: 项目的目标文件。
  • mySpider/pipelines.py: 项目的管道文件。
  • mySpider/settings.py: 项目的设置文件。
  • mySpider/spiders/: 存储爬虫代码目录。

2、创建爬虫

在当前目录下输入命令,将在mySpider/spiders目录下创建一个名为bd_test的爬虫,并指定爬取域的范围:

bash 复制代码
scrapy genspider bd_test "baidu.com"

注意:

第一个参数是爬虫名字不是项目名字;

第二个参数是网站域名,是允许爬虫采集的域名。比如:baidu.com 不限制域名 可能爬到 zhihu.com 。后期可以更改,但要先有生成的目录和文件结果:

执行命令(执行的是spiders中name)

bash 复制代码
scrapy crawl baidu

也可以脚本运行

bash 复制代码
from scrapy import cmdline
cmdline.execute("scrapy crawl qb".split())

3、编写spiders

class中的

name:也是就是爬虫名一定是唯一的

allowed_domains:域名

start_urls:链接(列表可写入多条,按顺序)一般一个

parse(): 被调用时,每个初始 URL 完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据,提取数据(生成 item)以及生成需要进一步处理的 URL 的 Request 对象。

4、创建item

创建完 Spider 文件之后,接着定义一个容器来保存要爬取的数据,我们对items.py文件进行更改或者创建一个新的文件来定义 item 都行。

创建 Item 需要继承 scrapy.Item 类,并且定义类型为 scrapy.Field 的字段。例如我们要爬取慕课网站课程的信息,包括课程名称,课程 URL,课程图片 URL,课程描述,学习人数。

bash 复制代码
import scrapy

class MyreptileItem(scrapy.Item):
    # 在这里可以定义你需要的字段,如:
    name = scrapy.Field()
    title = scrapy.Field()
    url = scrapy.Field()
    image_url = scrapy.Field()
    introduction = scrapy.Field()
    student = scrapy.Field()

当spiders调用时,导入即可

5、pipelines.py

在Scrapy中,Pipelines 是用来处理爬取到的数据(Item)的组件。它们可以执行一些清理、验证和持久化(比如存储到数据库或文件)的操作。列入存入redis:

6、中间件middlewares

具体参考文章:https://www.jianshu.com/p/2c524bfc11d1

参考文献:同上

相关推荐
qq_3758726920 小时前
14爬虫:scrapy实现翻页爬取
爬虫·scrapy
漫无目的行走的月亮2 天前
基于Python Scrapy的豆瓣Top250电影爬虫程序
爬虫·python·scrapy
猿小猴子9 天前
Python3 爬虫 Scrapy 与 Redis
redis·爬虫·scrapy
黄不逗14 天前
【python系列之scrapy爬虫二】- pycharm中断点调试scrapy
爬虫·python·scrapy
white.tie15 天前
scrapy对接rabbitmq的时候使用post请求
scrapy
猿小猴子16 天前
Scrapy与MongoDB
数据库·scrapy·mongodb
凤枭香16 天前
Python 数据分析用库 获取数据(二)
人工智能·爬虫·python·scrapy
drebander22 天前
爬虫—Scrapy 整合 ChromeDriver 实现动态网页拉取
爬虫·python·scrapy
drebander24 天前
爬虫框架快速入门——Scrapy
爬虫·python·scrapy
猿小猴子24 天前
Python3 爬虫 Scrapy的使用
爬虫·scrapy