Scrapy爬取博人传漫画

Scrapy框架、

为什么要学习scrapy?
在这里插入图片描述
理由:日常的Requests + Selenium虽然可以爬取网站内容,一旦遇到下载文件/图片,下载速度慢的鸡肋很快就暴露出来,有人说可以自己写高并发处理,再加上各种处理规则,如此一来,代码维护难度只增未减,另不排除遇到进程/线程堵塞,作为成熟的scrapy库,具备异步网络库、稳定性高、非堵塞。
在这里插入图片描述

框架图
在这里插入图片描述

简单解析Scrapy框架流程

1.运行项目spiders执行到yield将request发送给engine,再到scheduler入队、排序处理
2.scheduler返回给engine、downloadermiddlewares交给downloader
3.downloader请求网络响应Responses,并经过engine、spidermiddlewares交给spiders
4.spiders提取数据并将items经engine发送给itempipline
.

组件介绍
Scrapy由5部分组成

Spiders:爬虫,定义了爬取的逻辑和网页内容的解析规则,主要负责解析响应并生成结果和新的请求
Engine:引擎,处理整个系统的数据流处理,框架的核心。
Scheduler:调度器,接受引擎发过来的请求,并将其加入队列中,在引擎再次请求时将请求提供给引擎
Downloader:下载器,下载网页内容,并将下载内容返回给spider
ItemPipeline:项目管道,负责处理spider从网页中抽取的数据,主要是负责清洗,验证和向数据库中存储数据
Downloader Middlewares:下载中间件,属于可自定义扩展,如代理(一般不写)
Spider Middlewares:spider中间件,可自定义request和responses过滤

网站分析
漫画首页:https://www.36mh.net/manhua/borenchuanhuoyingcishidai/
1、打开网站elements可以看到每个章节都存放在ul下
在这里插入图片描述
2、进入第1话,层层展开div,每一页只有一张图片,如果每次爬图片都要切换下一页,爬虫效率太低。可以看到图片src上面有一个nextPage函数,证明图片是经过js动态加载过的,图片动态加载无非两种方式:a.变量列表,b.图片名称编码加密(分析此方法需要对JavaScript有一定经验)
在这里插入图片描述
3、比较幸运的是该章节的所有图片名称都放在chapterImages列表里,在这里我们获取到另外两个重要信息,就是chapterpath(下载图片的图片),PageImage(含有下载图片的域名)。
在这里插入图片描述
分析完毕后,开始撸起代码。

创建/执行项目命令

创建项目:scrapy startproject borenzhuan
进入项目:cd borenzhuan #创建项目后会生成borenzhuan文件夹
创建爬虫:scrapy genspider borenzhuan(爬虫名) www.36mh.net (爬取域)
生成文件:scrapy crawl borenzhuan -o xxx.json (生成某种类型的文件)
运行爬虫:scrapy crawl borenzhuan #路径切换到spiders
列出所有爬虫:scrapy list
获得配置信息:scrapy settings [options]

目录结构
在这里插入图片描述
setting文件

ROBOTSTXT_OBEY = False #机器人协议,用来限定程序爬取范围,False不遵守协议
IMAGES_STORE=os.path.dirname(os.path.dirname(__file__)) #图片下载路径
#删除管道注释
ITEM_PIPELINES =
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给主私信或留言,主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
<think>好的,用户想了解如何使用Scrapy进行网页爬取。首先,我需要回忆一下Scrapy的基本架构和工作流程。Scrapy是一个强大的Python框架,专门用于高效地爬取网页并提取结构化数据。根据用户提供的引用内容,特别是引用[2]中提到Scrapy提供了多种爬虫基类,并且可以方便地修改,这应该是回答的重点。 接下来,我应该分步骤解释如何创建Scrapy项目,定义Item类,编写爬虫,以及处理数据。需要确保用户理解每个步骤的作用,比如生成项目结构、定义要抓取的数据字段、使用Spider类编写爬取逻辑,以及通过Item Pipeline处理数据存储。 用户可能对动态网页爬取有疑问,但根据问题,主要关注的是基本爬取流程。不过引用[1]提到使用Scrapy-Splash处理动态内容,这可能是一个相关的高级话题,可以在相关问题中提及。 另外,用户提供的引用[3]涉及递归爬取,即如何处理分页或深层链接。这也是实现完整爬虫的重要部分,需要在步骤中说明如何通过回调函数或跟进链接来实现。 需要注意使用正确的中文术语,比如“爬虫”而不是“蜘蛛”,同时确保代码示例符合Scrapy的最新版本语法,例如使用start_requests方法和yield语句生成请求。还要提醒用户运行爬虫的命令,如scrapy crawl,如引用[1]中的示例。 最后,生成的相关问题需要覆盖用户可能进一步探索的方向,比如处理动态内容、数据存储优化、递归爬取策略以及遵守Robots协议等。这些扩展问题可以帮助用户深入理解Scrapy的不同方面。</think>### 如何用Scrapy实现网页爬取 #### 1. 创建Scrapy项目 通过命令行初始化项目结构: ```bash scrapy startproject myproject cd myproject ``` 生成的文件包含`items.py`(数据模型)、`middlewares.py`(中间件)、`pipelines.py`(数据处理)和`settings.py`(配置)[^2]。 #### 2. 定义数据模型 在`items.py`中声明要抓取的字段: ```python import scrapy class ArticleItem(scrapy.Item): title = scrapy.Field() content = scrapy.Field() url = scrapy.Field() ``` #### 3. 编写爬虫逻辑 在`spiders/`目录下新建爬虫文件(如`article_spider.py`): ```python import scrapy from myproject.items import ArticleItem class ArticleSpider(scrapy.Spider): name = "news_crawler" start_urls = ["https://example.com/news"] def parse(self, response): # 提取文章列表 for article in response.css("div.article-list"): item = ArticleItem() item["title"] = article.css("h2::text").get() item["url"] = article.css("a::attr(href)").get() # 跟进详情页 yield response.follow(item["url"], self.parse_detail, meta={"item": item}) def parse_detail(self, response): item = response.meta["item"] item["content"] = response.css("div.main-content::text").getall() yield item ``` #### 4. 配置参数优化 在`settings.py`中设置: ```python USER_AGENT = "Mozilla/5.0 (compatible; MyBot/1.0)" DOWNLOAD_DELAY = 2 # 降低请求频率 AUTOTHROTTLE_ENABLED = True # 自动限速 ITEM_PIPELINES = { "myproject.pipelines.JsonWriterPipeline": 300, } ``` #### 5. 数据存储处理 在`pipelines.py`中实现存储逻辑: ```python import json class JsonWriterPipeline: def open_spider(self, spider): self.file = open("articles.jl", "w") def close_spider(self, spider): self.file.close() def process_item(self, item, spider): line = json.dumps(dict(item)) + "\n" self.file.write(line) return item ``` #### 6. 执行爬虫 通过命令运行(支持多种输出格式): ```bash scrapy crawl news_crawler -o articles.csv ``` #### 关键组件说明 - **引擎(Engine)**: 控制数据流的核心系统 - **调度器(Scheduler)**: 管理请求队列 - **下载器(Downloader)**: 处理HTTP请求 - **爬虫(Spider)**: 自定义抓取规则 - **中间件(Middleware)**: 扩展请求/响应处理 - **管道(Pipeline)**: 数据清洗与持久化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值