Scrapy 的初步认识

简介: Scrapy 是一个高级的 Python 爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫获取的数据保存到 csv、json 等文件中。Scrapy 使用了 Twisted 作为框架,Twisted 是事件驱动的,对于会阻塞线程的操作(访问文件、数据库等),比较适合异步的代码。

Scrapy 的初步认识


  • Scrapy 是一个高级的 Python 爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫获取的数据保存到 csv、json 等文件中。
  • Scrapy 使用了 Twisted 作为框架,Twisted 是事件驱动的,对于会阻塞线程的操作(访问文件、数据库等),比较适合异步的代码。

Scrapy 整体架构


Scrapy 数据流是由执行的核心引擎(Engine)控制,流程是这样的:

  1. Engine 获得初始请求开始抓取。
  2. Engine 开始请求调度程序 Scheduler,并准备对下一次的请求进行抓取。
  3. Scheduler 返回下一个请求给 Engine。
  4. Engine 请求发送到下载器 Downloader,通过下载中间件下载网络数据。
  5. 一旦 Downloader 完成页面下载,将下载结果返回给 Engine。
  6. Engine 将 Downloader 的响应通过 Middlewares 返回给 Spider 进行处理。
  7. Spider 处理响应,并通过 Middlewares 返回处理后的 Items,以及新的请求给 Engine。
  8. Engine 发送处理后的 Items 到 Pipeline,然后把处理结果返回给 Scheduler,计划处理下一个请求抓取。
  9. 重复该过程(继续步骤1),直到爬取完所有的 url 请求。

项目结构及文件说明


  1. ├──EastmoneySpider
  2.   ├── README.md
  3.   ├── __init__.py
  4.   ├── items.py
  5.   ├── middlewares.py
  6.   ├── pipelines.py
  7.   ├── settings.py
  8.   └── spiders
  9.       ├── __init__.py
  10.       ├── blog.py
  11.       ├── jobbole.py
  12. └── scrapy.cfg
  • items.py 负责数据模型的建立,类似于实体类。存放的是要爬取数据的字段信息,如:文章标题,文件发布时间,文章 url 地址。
  • middlewares.py 自己定义的中间件。
  • pipelines.py 负责对 Spider 返回数据的处理。Pipeline 主要是对 Spider 中爬虫的返回的数据的处理,这里可以让 Items 写入到数据库,也可以让写入到文件。
  • settings.py 负责对整个爬虫的配置。
  • spiders目录 负责存放继承自 scrapy 的爬虫类。
  1. 为主要的爬虫代码,包括了对页面的请求以及页面的处理,parse 方法的 response 返回的是这个页面的信息,这时如果需要对获取的每个文章的地址继续访问,就用到了 yield Request() 这种用法,可以把获取到文章的 url 地址继续传递进来再次进行请求(如:爬取文章列表页,然后继续爬去文章详情页的场景)。
  2. scrapy 提供了 response.css 这种的 css 选择器以及 response.xpath 的 xpath 选择器方法,可以根据自己的需求获取想要的字段信息
  • scrapy.cfg scrapy 基础配置


相关文章
|
存储 安全 算法
AVB源码学习(一):AVB2.0工作原理及编译配置
AVB源码学习(一):AVB2.0工作原理及编译配置
1573 0
|
11月前
|
API 开发者
鸿蒙next版开发:ArkTS组件通用属性(浮层)
在HarmonyOS 5.0中,ArkTS的浮层属性(overlay)允许开发者在组件上增加遮罩文本或叠加自定义组件,实现丰富的界面效果。本文详细解读了overlay属性的用法,并提供了示例代码,包括静态和动态浮层的应用。通过本文,读者可以掌握如何在UI开发中有效利用这一功能。
547 6
|
存储 运维 监控
构建端到端可观测全景丨云栖大会可观测分享实录
构建端到端可观测全景丨云栖大会可观测分享实录
738 93
|
Python
Python 设置环境变量方法
Python 设置环境变量方法
322 0
|
存储 NoSQL 数据处理
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
探索MongoDB:灵活、高性能的NoSQL数据库解决方案与应用实践
543 1
|
前端开发 容灾 安全
Docker Swarm 共享卷
Docker Swarm 共享卷
802 0
|
Web App开发 JavaScript 前端开发
Python Selenium 执行 JavaScript
Python Selenium 执行 JavaScript
|
存储 Kubernetes 安全
Docker Hub 现在是需要付费才能使用其全部功能?
Docker Hub 现在是需要付费才能使用其全部功能?
747 0
内网穿透报错 Invalid Host header
内网穿透报错 Invalid Host header
755 0
|
机器学习/深度学习 传感器 算法
【数字水印】基于小波变换算法DWT实现水印嵌入提取(含滤波攻击)含Matlab代码
【数字水印】基于小波变换算法DWT实现水印嵌入提取(含滤波攻击)含Matlab代码
【数字水印】基于小波变换算法DWT实现水印嵌入提取(含滤波攻击)含Matlab代码