网络爬虫框架Scrapy

一:Scrapy的介绍:

(1)什么是Scrapy

Scrapy是一个用Python编写的网络爬虫框架,它提供了许多工具和功能,使得开发者可以轻松地构建强大的网络爬虫。

(2)Scrapy的主要特点包括:Scrapy核心组件与CrawlSpider类

  • 快速:Scrapy使用了异步IO框架Twisted,使得爬虫可以同时处理多个请求,提高了爬取效率。
  • 灵活:Scrapy提供了丰富的API和组件,开发者可以根据自己的需求定制爬虫的行为。
  • 易用:Scrapy的API设计简洁明了,文档丰富,使得开发者可以快速上手。
  • 社区活跃:Scrapy有一个活跃的社区,开发者可以在社区中寻求帮助、分享经验和学习最新的技术。

(3)Scrapy的优点和缺点

1:优点

  • 异步处理:Scrapy使用了Twisted库,这使得它在处理网络请求时能够进行异步操作。这使得Scrapy能够同时处理多个请求,提高了爬虫的效率。
  • 强大的选择器:Scrapy使用CSS选择器来定位和提取HTML中的元素。CSS选择器是一种非常强大的工具,能够快速准确地定位到页面中的特定元素。
  • 内置的调度器:Scrapy有一个内置的调度器,可以保存和重新发送未完成的请求。这对于处理需要大量时间的爬虫任务非常有用,因为即使在短暂的网络中断后,爬虫也能够继续之前的工作。
  • 支持分布式爬虫:Scrapy支持分布式爬虫,这意味着你可以使用多个爬虫同时抓取一个网站,从而大大提高爬取速度。
  • 可扩展性:Scrapy的架构允许你轻松地添加自定义组件,如中间件、管道等。这使得Scrapy具有很高的可扩展性,可以根据你的需求进行定制。
  • 社区支持:Scrapy有一个活跃的社区,提供了大量的教程、示例和插件。这意味着你可以在遇到问题时快速找到解决方案。

2:缺点

  • 学习曲线:Scrapy的学习曲线相对较陡,尤其是对于初学者而言。它的文档和社区资源虽然丰富,但可能需要一些时间来熟悉其架构和工作原理。
  • 配置复杂性:Scrapy的配置相对复杂,需要编写和配置多个文件,包括爬虫文件、设置文件、中间件等。这可能会增加开发时间和维护成本。
  • 无法直接处理JavaScript:Scrapy默认无法处理JavaScript生成的内容。这意味着如果网站使用JavaScript来加载数据或渲染页面,Scrapy可能无法直接获取这些数据。虽然有一些方法可以绕过这个限制,如使用Selenium等工具,但这可能会增加复杂性和性能开销。
  • 内存消耗:Scrapy在处理大量数据时可能会消耗较多的内存。这可能会导致性能下降或系统资源不足的问题。
  • 分布式支持有限:虽然Scrapy支持分布式爬虫,但其内置的分布式支持相对较弱。要实现高效的分布式爬虫,可能需要额外的配置和工具,如使用Redis作为消息队列等。
  • 不支持Windows:Scrapy官方并不支持Windows操作系统,尽管可以在Windows上运行Scrapy,但可能会遇到一些兼容性问题。 

(4)Scrapy的组件

1:组成部分

Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我们分别介绍各个组件的作用。

调度器(Scheduler):

调度器,说白了把它假设成为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。

下载器(Downloader):

下载器,是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。

爬虫(Spider):

爬虫,是用户最关心的部份。用户定制自己的爬虫(通过定制正则表达式等语法),用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。 用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

实体管道(Item Pipeline):

实体管道,用于处理爬虫(spider)提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后, 将被发送到项目管道, 并经过几个特定的次序处理数据.

Scrapy引擎(Scrapy Engine):

Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程,对整个系统的数据流进行处理, 触发事务。

(5)scrapy工作流程 

1:工作流程

2:网络爬虫工作流程图 

 二:Scrapy框架安装

(1)安装Scrapy

由于Windows 7系统默认没有安装Python,所以在安装Scrapy框架之前,需要保证Windows 7系统下已经安装了Python。在命令提示符窗口中使用pip工具安装Scrapy框架,然后在命令提示符窗口输入

pip install scrapy==2.5.0

(2)常见安装问题

1:缺少Microsoft Visual C++ 14.0组件

在Windows 7系统下安装Scrapy框架常见的两个问题是缺少Microsoft Visual C++ 14.0组件和Twisted安装出错。

以下是缺少Microsoft Visual C++ 14.0组件的报错代码

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

2:缺少Microsoft Visual C++ 14.0组件

在当前电脑上缺少Microsoft Visual C++ 14.0组件,则可以单独安装该组件。在浏览器中进入下载Microsoft Visual C++ 14.0组件的页面。完成下载后可以看到下载的安装包。双击安装包进行安装,在安装过程中全部保持默认设置即可,无须进行任何修改。 需要注意的是,我们在Visual Studio 2015组件安装完成之后需要重启计算机

3:Twisted安装出错

  • 由于Scrapy框架使用了异步网络框架Twisted,所以在安装Scrapy的过程中需要安装Twisted。若没有安装Teisted,则出现以下信息。
fatal error C1083: Cannot open include file: 'basetsd.h': No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
  • 若未安装Twisted,则可以单独安装。在浏览器中访问Twisted的下载页面。
  • 在Twisted下载页面中选择适合自己电脑的安装包进行安装。
pip install Twisted 20.3.0 cp36 cp36m win32.whl

三:Scrapy框架基本操作

(1)创建Scapy项目

创建Scrapy项目需要使用如下命令:

scrapy startproject 项目名称

成功后会在该目录下生成对应项目文件:

(2)创建爬虫任务

1:创建爬虫

创建爬虫主要是为爬虫起一个名称

scrapy genspider 爬虫名称 "爬取域"

例如,在命令行窗口中切换当前的目录为子目录mdSpider/spiders,创建一个名称为itcast、爬取域为itcast.cn的爬虫。 

scrapy genspider itcast "itcast.cn"

在PyCharm中打开mdSpider/spiders目录,可以看到新创建的itcast.py,该文件的内容已经自动生成。 

四:命令语句

scrapy startproject <project_name>创建新的 Scrapy 项目
scrapy genspider <spider_name>创建新的爬虫
scrapy crawl <spider_name>运行爬虫
scrapy list列出可用的爬虫
scrapy crawl <spider_name> -o <output_file>导出爬取结果
scrapy crawl <spider_name> -a -s LOG_LEVEL=DEBUG运行爬虫并进行调试
scrapy crawl <spider_name> --spider <spider_name> --nolog -s LOG_LEVEL=INFO查看爬虫的详细信息
scrapy version显示 Scrapy 版本信息
scrapy check检查 Scrapy 项目的语法错误
scrapy runspider <spider_file>运行 Scrapy 命令并输出结果到标准输出
scrapy check <spider_file>检查爬虫文件的语法错误
scrapy crawl <spider_name> -s JOBDIR=<job_directory> --nolog清除爬虫的临时数据
scrapy crawl <spider_name> -o <output_file>.jl导出爬虫的数据到 JSON Lines 格式
scrapy crawl <spider_name> -o <output_file>.xml导出爬虫的数据到 XML 格式
scrapy crawl <spider_name> -s LOG_FILE=<log_file>运行爬虫并将日志输出到文件

五:scrapy.http

(1)scrapy.http的介绍

Scrapy是一个适用于Python的快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,

from scrapy.http import Response:用于表示一个 HTTP 响应。包含响应的状态码、响应头、响应体等信息 

  • Response(url,status,headers,body,flags,request,certificate,ip_address,protocol):创建Response对象
  • url (str): 响应的 URL 地址。
  • status (int): 响应的状态码。
  • headers (dict or Headers): 响应的头部信息。可以是字典形式的头部信息,也可以是 Headers 对象。

url 是新的 URL 地址,
encoding 是新的编码方式
response.urljoin(url):用来构造url
response.copy():创建当前响应的副本
response.url:响应的 URL 地址
response.status:响应的状态码
response.headers:响应的头部信息。
response.body:响应的原始 HTML 内容
 

  • 28
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Scrapy是一个适用于Python的快速、高层次的屏幕抓取和web抓取框架。它可以用于抓取web站点并从页面中提取结构化的数据。Scrapy的用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy是一个框架,可以根据需求进行定制,并提供了多种类型爬虫的基类,如BaseSpider和sitemap爬虫等。最新版本还提供了对web2.0爬虫的支持。 网络爬虫框架Scrapy还有一些基本模块,包括spiders、items、pipelines和middlewares等。其中,spiders下的jingding.py是Scrapy自动生成的爬虫文件,它继承了scrapy.Spider类,这是Scrapy中最基本的类,所有编写的爬虫都必须继承这个类。在jingding.py文件中,可以定义需要爬取的网站的URL和解析响应的方法等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [爬虫框架 Scrapy 详解](https://blog.csdn.net/m0_67403076/article/details/126081516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [开源python网络爬虫框架Scrapy.pdf](https://download.csdn.net/download/weixin_72426331/85854755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值