导入
Scrapy 简介
了解Scrapy应用框架及其功能。
...
Scrapy功能
| 特性 | Beautiful Soup | Scrapy |
|---|---|---|
| 目的 | 主要用于数据解析 | 专为大规模网页抓取和爬行设计 |
| 适用场景 | 小到中等规模项目,网站数量少于100个 | 更适合大型项目,网站数量超过1000个 |
| 并发支持 | 不支持 | 支持 |
| 数据存储 | 需要外部库和工具 | 内置支持多种格式的数据存储 |
| 解析类型 | HTML | HTML 和 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: 爬虫已关闭(完成)