Scrapy框架

举报
developer_Li 发表于 2025/03/25 10:48:21 2025/03/25
【摘要】 Scrapy组件 (1) • 引擎(Engine): 用来处理整个系统的数据流处理, 触发事务(框架核心)。• 调度器(Scheduler): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。• 下载器(Downloader): 用于下载网页内容,...

Scrapy组件 (1) 
• 引擎(Engine): 用来处理整个系统的数据流处理, 触发事务(框架核心)。
• 调度器(Scheduler): 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。
• 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给spider(Scrapy下载器是建立在twisted这个高效的异步模型上的)。

Scrapy组件 (2) 
• 爬虫(Spiders): spider是爬虫程序主体, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。
• 管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
• 下载器中间件(Downloader Middlewares): 位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。

Scrapy组件 (3) 
• 爬虫中间件(Spider Middlewares): 介于Scrapy引擎和爬虫之间的组件,主要工作是处理spider的响应输入和请求输出。
• 调度中间件(Scheduler Middewares): 介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应

创建Scrapy工程
• 创建Scrapy项目的命令:scrapy startproject +<项目名字>
– scrapy startproject MySpider
• 工程结构:

项目解析 - scrapy.cfg
• scrapy.cfg:Scrapy的项目配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
– settings:项目中的全局配置文件。
– deploy:项目部署配置。

项目解析 - middlewares
• middlewares.py:可以分为爬虫中间件和下载中间件。
– MyspiderSpiderMiddleware:爬虫中间件是可以自定义requests请求和进行response过滤,一般不需要手写。
– MyspiderDownloaderMiddleware可以自定义的下载扩展,比如设置代理等。

项目解析 - settings (1)
• settings.py:项目的全局配置文件。
• 常用字段:
– USER_AGENT :设置user-agent参数(默认未开启)
– ROBOTSTXT_OBEY :是否遵守robots协议,默认是遵守(默认开启)
– CONCURRENT_REQUESTS :设置并发请求的数量(默认是16个)
– DOWNLOAD_DELAY :下载延迟(默认无延迟)
– COOKIES_ENABLED :是否开启cookie,即每次请求带上前一次的cookie(默认是开启)

项目解析 - Settings (2)
• 常用字段:
– DEFAULT_REQUEST_HEADERS: 设置默认请求头 默认未设置
– SPIDER_MIDDLEWARES :爬虫中间件,设置过程和管道相同 默认未开启
– DOWNLOADER_MIDDLEWARES: 下载中间件 默认未开启
– ITEM_PIPELINES:开启管道。

项目解析 - Items、Piplines
• items.py:定义Item数据结构,即自己要爬取的内容,所有的Item的定义都可以放在这里。
• piplines.py:定义Item Pipeline的实现用于保存数据。
– 不同的pipeline可以处理不同爬虫的数据,通过spider.name属性来区分。
– 不同的pipeline能够对一个或多个爬虫进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存
– process_item(self,item,spider):实现对item数据的处理
– open_spider(self, spider): 在爬虫开启的时候仅执行一次
– close_spider(self, spider): 在爬虫关闭的时候仅执行一次

Scrapy日志解析
• Scrapy在运行时会默认打印一些日志信息。
– [scarpy.utils.log] INFO:scarpy工程的settings信息。
– [scrapy.middleware] INFO:工程启动的扩展程序、下载中间件、管道。
– [scarpy.extension.telnet] DEBUG:爬虫运行时能够用talnet命令进行控制。
– [scarpy.statscollectors] INFO:爬虫结束时的一些统计信息

爬虫分类
• Scrapy框架中的爬虫分为两类:Spider和Crawlspider。
• Spider类的设计原则是只爬取start_url列表中的网页。
• Crawlspider是Spider的派生类(一个子类), CrawlSpider类定义了一些规则(rule)能够匹配满足条件的URL地址,组装成Reuqest对象后自动发送给引擎,同时能够指定callback函数

Spider参数解析
• 使用命令创建spider后会自动生成一些代码:
– QuoteSpider:当前的爬虫类。
– Name:爬虫的唯一标示名。
– allowed_domains:url范围。
– start_urls:起始爬取的url。
– parse:数据定位

定义parse
• parse方法定义了response的处理过程:
– Scrapy中的response可以直接使用XPath进行数据定位。

scrapy.Request
• scrapy.Request(url[,callback,method=“GET”,headers,body,cookies,meta,dont_filter=False]):scrapy中用于发送请求的类。
– Callback:当前请求url的响应的处理函数。
– method:指定POST或GET请求
– headers:接收一个字典,其中不包括cookies
– cookies:接收一个字典,专门放置cookies
– body:接收一个字典,为POST的数据
– dont_filter:过滤url,不会对已请求过的url再次请求。
– meta:实现数据在不同的解析函数中传递。

运行爬虫
• 在项目目录下执行scrapy crawl +spider
– scrapy crawl quote
– 运行后会打印Scrapy的项目日志,没有开启管道设置数据处理的方法,爬取的数据也会在日志文件中。

Crawlspider爬虫创建
• 创建Crawlspider:
– scrapy genspider -t crawl 爬虫名字 爬取范围
– scrapy genspider -t crawl crawl_quote quotes.toscrape.com

Crawlspider参数解析
• 相比于Spider,Crawlspider中多了rules属性。少了parse方法。
– rules:满足匹配规则的url。
– Rule:表示规则。
– LinkExtractor:连接提取器,可以通过正则、XPath来进匹配。
– callback :表示经过连接提取器提取出来的URL地址响应的回调函数。

Scrapy中间件
• Scrapy中的中间件主要功能为在爬虫运行过程中进行一些处理,如对于非200的响应后续处理、发送请求时headers字段和cookie的处理。
• Scrapy中的中间件根据功能可以分为两类:
– 下载中间件
– 爬虫中间件

下载中间件
• 主要功能在请求到网页后,页面被下载时进行一些处理。
• 下载中间件Downloader Middlewares:
– process_request(self, request, spider):
• 当每个request通过下载中间件时,该方法被调用。
– process_response(self, request, response, spider):
• 当下载器完成http请求,传递响应给引擎的时候调用。

爬虫中间件
• 主要功能是在爬虫运行过程中进行一些处理。
• 爬虫中间件Spider Middleware:
– process_spider_input :接收一个response对象并处理。
– process_spider_exception:spider出现的异常时被调用。

中间件使用注意事项
• Scrapy中的中间件写在工程项目中的middlewares.py文件中。
• 中间件在写好以后需要在settings.py文件中开启。
– SPIDER_MIDDLEWARES :爬虫中间件
– DOWNLOADER_MIDDLEWARES :下载中间件


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。