Scrapy框架

这篇文章我们将去介绍引入框架的原因和相关的好处

1、为什么需要爬虫框架 2、Scrapy的运行机制 3、Spiders介柖 4、Spider的编写 5、Items的编写 6、Item Pipeline的编写 7、Selectors的编写 8、文件下载

以前的爬虫程序 获取数据  requests 解析数据  BeautifulSoup等 提取数据 存储数据  CSV、Excel、MySQL等 爬虫框架 自动实现

原本的时候,我们在使用爬虫的时候,会调用很多相关的包,不管是下载还是引入都是相对来说是比较的繁琐的

所以就想Java中的Spring全家桶和python中的flask和Django等相关的框架

当我们去引入相关的框架的时候

在爬虫的实现的该过程中,有很多底层的东西是不需要我们去进行相关的调用的

我们只要去依托于框架的实现,就可以对相关的数据实现我们想要的相关的操作

Python常见的爬虫框架

Scrapy框架:Scrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发的快速、高层次的信息爬取框架,可以高效地爬取Web页面并提取出结构化的数据。 PySpider框架:PySpider是以Python脚本驱动的抓取环模型爬虫框架 Crawley框架:Crawley也是Python开发的爬虫框架,该框架致力于改变人们从互联网中提取数据的方式 Portia框架:Portis框架是一款允许没有任何编程基础的用户可视化地爬取网页的爬虫框架 Newspaper框架:Newspaper框架是一款用来提取新闻、文章以及内容分析的Python爬虫框架

Scrapy的安装 首先先来安装Twisted ,在线安装容易出错,可采用离线安装 下载网址:https://pypi.tuna.tsinghua.edu.cn/simple/twisted/ 安装方式: 切换到下载的目录 pip install  具体文件名 安装Scrapy 在线安装 pip install scrapy

Scrapy框架的结构及工作原理

Scrapy框架的工作原理 Scrapy Engin(引擎):Scrapy框架的核心部分。负责在Spider和Item Pipeline、Downloader、Scheduler中间通信、传递数据等。 Spider(爬虫):发送需要爬取的链接给引擎,最后引擎把其他模块请求回来的数据再发送给爬虫,爬虫就去解析想要的数据。 Scheduler(调度器):负责接收引擎发送过来的请求,并按照一定的方式进行排列和整理,负责调度请求的顺序等。 Downloader(下载器):负责接收引擎过来的下载请求,然后去网络上下载对应的数据再交给引擎。 Item Pipeline(管道):负责将爬虫传递过来的数据进行保存。 Downloader Middlewares (下载中间件):可以扩展下载器和引擎之间通信功能的中间件 Spider Middlewares(Spider中间件):可以扩展引擎和爬虫之间通信功能的中间件

最开始的就是我们的项目的根目录

在豆瓣中就是我们的爬虫的目录

items就是我们用来去定义数据的

pip就是用来处理数据的

settings就是相关的各种的设置

对应这个框架的学习,我们首先要去了解这个框架的相关的语言和规则

再去对这个框架进行一个相关的使用

Rule规则类 定义爬虫的规则类 主要参数 link_extractor:一个LinkExtractor对象,用于定义爬虫规则 callback:满足这个规则的url,应该要执行哪个回调函数 follow :指定根据该规则从response中提取的链接是否需要跟进 process_links:从link_extractor中获取到的链接后会传递给这个函数,用来过滤不需要爬取的链接

需求分析 实现猎云网网站的文章数据爬虫。要求保存标题、发布时间、内容、原始url字段,然后异步保存到mysql数据库 翻页链接 https://www.lieyunwang.com/latest/p1.html 翻页规则 Rule(LinkExtractor(allow=r'/latest/p\d+.html'), follow=True) 文章详情页规则 Rule(LinkExtractor(allow=r'/archives/\d+'),callback="parse_item",follow=False)

异步保存MySQL数据 同步与异步是相对的 同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。 异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

异步保存MySQL数据 操作步骤 编写配置文件 读取配置文件 创建数据库(navicat的使用) 使用twisted.enterprise.adbapi来创建连接池 使用runInteraction来运行插入sql语句的函数 使用cursor对象,执行sql语句,cursor对象位于插入sql语句函数的第一个非self参数位置

Request子类FormRequest对象 FormRequest类扩展了Request,具有处理HTML表单的功能 参数说明: formdata:是一个包含HTML Form数据的字典,它将被URL编码并分配给请求的主体

Scrapy提供了一个item pipeline,来下载属于某个特定项目的图片 避免重新下载最近已经下载过的文件 可以方下便的指定文件存储路径 可以将下载的图片转换成通用的图片格式(JPG等) 可以方便 的生成缩略图 可以方便 的检测图片的宽和高,确保他们满足最小限制 异步下载,效率非常高

操作步骤 定义一个item,上面有两个字段,一个 是image_urls,一个是images。image_urls用来存储图片的链接 ,images是由开发者把数据爬取下来后添加的 使用scrapy.pipelines.images.ImagesPipeline来作为数据保存的pipeline 在settings.py中设置IMAGES_STORE来定义图片下载的路径 如果想要有更复杂的图片保存的路径,可以重写ImagePipeline的file_path方法,这个方法用来返回每个图片的保存路径

process_request方法详解 功能 下载器在发送请求之前调用执行,一般可以在这里设置随机代理IP等 参数 request :发送请求的request对象 spider:发送请求的spider对象 返回值 返值None:Scrapy将继续处理request,执行其他中间件中的相应方法,直到合适的下载器处理函数被调用 返回Response对象:Scrapy将不会调用任何其他的process_request方法,将直接返回这个response对象。已经激活的中间件的process_response()方法则会在每个response返回时被调用。 返回Request对象:不再使用之前的request对象去下载数据,而是根据现在返回的request对象返回数据 如果该方法中抛出了异常,则会调用process_exception方法

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值