Logo
Section 1 / 9

Scrapy 简介

了解Scrapy应用框架及其功能。

导入

Scrapy 简介

了解Scrapy应用框架及其功能。

...
Scrapy功能

特性Beautiful SoupScrapy
目的主要用于数据解析专为大规模网页抓取和爬行设计
适用场景小到中等规模项目,网站数量少于100个更适合大型项目,网站数量超过1000个
并发支持不支持支持
数据存储需要外部库和工具内置支持多种格式的数据存储
解析类型HTMLHTML 和 XML
学习曲线学习门槛低,适合初学者入门网页抓取学习曲线较陡,需要更多编程经验和对网页抓取的熟悉度

优点缺点
异步处理:Scrapy 基于异步架构,可同时发送多个请求并并行处理数据。简单任务过于复杂:对于简单的抓取任务,Scrapy 的强大功能可能显得过度设计。
内建请求管理:Scrapy 提供内置系统,自动处理 HTTP 请求发送、Cookie 管理、重定向处理及响应码处理。JavaScript 支持有限:Scrapy 主要针对静态页面抓取,对大量依赖 JavaScript 渲染内容的动态网站支持较弱。
可扩展性:Scrapy 架构专为高效处理大规模抓取任务而设计。资源消耗高:并发请求能力可能导致资源占用增加,尤其在处理大量请求时更为明显。
日志与调试:提供全面的日志记录和调试工具,便于识别和排查抓取过程中的问题。维护成本高:虽然鼓励模块化设计,但自定义中间件和管道的开发与维护会带来额外负担,尤其随着项目演进而加剧。
数据项管道:提供强大的数据项处理流水线,在数据存储前进行清洗和转换。学习曲线陡峭:高级功能和架构概念对初学者构成挑战。
爬取控制:可轻松控制请求频率、设置爬取延迟,并配置规则以避免对目标网站造成压力或触发反爬机制。数据完整性挑战:由于异步特性,跨多个请求和管道保持数据一致性和完整性更具复杂性。

Scrapy 项目结构

1scraper/ 2 scrapy.cfg 3 scraper/ 4 __init__.py 5 items.py 6 middlewares.py 7 pipelines.py 8 settings.py 9 spiders/ 10 __init__.py
Terminal
...
Scrapy 架构

No configuration found for ID: 0a54df5389e513aa73a17f2a3141d076ff0792d75fb627234ce1a7f348238f5c

Scrapy 项目日志配置

12023-08-18 21:41:23 [scrapy.middleware] INFO: 已启用下载中间件: 2['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 3 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 4 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 5 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 6 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 7 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 8 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 9 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 10 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 11 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 12 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 132023-08-18 21:41:23 [scrapy.middleware] INFO: 已启用爬虫中间件: 14['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 15 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 16 'scrapy.spidermiddlewares.referer.RefererMiddleware', 17 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 18 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 192023-08-18 21:41:23 [scrapy.middleware] INFO: 已启用数据项管道: 20[]

Scrapy 日志:每页详细信息

12023-08-18 21:51:10 [scrapy.core.engine] INFO: 爬虫已打开 22023-08-18 21:51:10 [scrapy.extensions.logstats] INFO: 已爬取 0 页(当前速度 0 页/分钟),已抓取 0 项(当前速度 0 项/分钟) 32023-08-18 21:51:10 [scrapy.extensions.telnet] INFO: Telnet 控制台监听于 127.0.0.1:6023 42023-08-18 21:51:10 [scrapy.core.engine] DEBUG: 已爬取 (200) <GET https://books.toscrape.com/> (来源: None) 52023-08-18 21:51:11 [scrapy.core.scraper] DEBUG: 从 <200 https://books.toscrape.com/> 抓取数据 6{'title': 'Attic 中的一束光', 'image': 'https://books.toscrape.com/media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg', 'rate': '三星', 'price': '£51.77'} 72023-08-18 21:51:11 [scrapy.core.scraper] DEBUG: 从 <200 https://books.toscrape.com/> 抓取数据 8{'title': 'Tipping the Velvet', 'image': 'https://books.toscrape.com/media/cache/26/0c/260c6ae16bce31c8f8c95daddd9f4a1c.jpg', 'rate': '一星', 'price': '£53.74'}

Scrapy 日志:统计信息

12023-08-18 21:51:11 [scrapy.core.engine] INFO: 关闭爬虫(完成) 22023-08-18 21:51:11 [scrapy.statscollectors] INFO: 导出 Scrapy 统计数据: 3{'downloader/request_bytes': 219, 4 'downloader/request_count': 1, 5 'downloader/request_method_count/GET': 1, 6 'downloader/response_bytes': 51555, 7 'downloader/response_count': 1, 8 'downloader/response_status_count/200': 1, 9 'elapsed_time_seconds': 0.402809, 10 'finish_reason': 'finished', 11 'finish_time': datetime.datetime(2023, 8, 18, 21, 51, 11, 124639), 12 'item_scraped_count': 20, 13 'log_count/DEBUG': 22, 14 'log_count/INFO': 10, 15 'log_count/WARNING': 2, 16 'memusage/max': 57954304, 17 'memusage/startup': 57954304, 18 'response_received_count': 1, 19 'scheduler/dequeued': 1, 20 'scheduler/dequeued/memory': 1, 21 'scheduler/enqueued': 1, 22 'scheduler/enqueued/memory': 1, 23 'start_time': datetime.datetime(2023, 8, 18, 21, 51, 10, 721830)} 242023-08-18 21:51:11 [scrapy.core.engine] INFO: 爬虫已关闭(完成)

网页抓取的基本概念

Scrapy 核心