php如何抓取网页数据库(Java开发之Scrapy的基本原理(一):Scrapy框架)

优采云 发布时间: 2021-09-23 14:16

  php如何抓取网页数据库(Java开发之Scrapy的基本原理(一):Scrapy框架)

  在上一章中,我们用尽可能少的代码演示了crawler的基本原理。如果我们只需要获取一些简单的数据,我们可以通过修改前面的代码来完成任务。然而,当我们需要完成一些复杂的*敏*感*词*爬行任务时,我们需要考虑更多的东西,如爬虫的可伸缩性、爬行效率等。

  现在让我们回顾一下爬网的过程:从要下载的URL列表中获取URL;构建并发送HTTP请求以下载网页;分析网页,提取数据,分析网页,提取URL并将其添加到要下载的列表中;存储从网页中提取的数据。在这个过程中,有许多常见的地方,对于特定的爬网任务,只有网页数据和URL提取是相关的。因为公共代码部分可以重用,所以框架诞生了。现在python下有很多爬虫框架,最常用的是scripy。接下来,让我们简要介绍一下scrapy的用法

  刮板框架的介绍与安装

  Scrapy是python开发的一个快速高效的web爬行框架,用于对web站点进行爬行并从页面中提取结构化数据。Scrapy广泛应用于数据挖掘、监控和自动化测试。scrapy的安装也非常简单。只要运行PIP install scrapy,我们需要的开发环境就准备好了

  创建一个粗糙的项目

  在这里,我们将用scrapy框架重写我们面前的爬虫程序。在开始之前,我们需要创建一个新的scratch项目。假设我们的项目名为doublan,并运行scratch startproject doublan。doublan文件夹已创建。此文件夹收录我们的爬虫程序的基本框架

  以下是一些重要的概念:item表示我们从web页面提取的数据,提取的数据将存储在item对象中

  Spider处理返回的网页以提取数据。提取数据,生成一个item对象并将其返回到框架

  流水线实现了数据的采集和存储。当spider返回item对象时,框架将根据配置调用管道来存储数据。为什么叫管道?因为我们可以实现多种数据存储方法。例如,数据需要保存到数据库和文件中,我们可以实现和配置两个管道类,并依次调用不同的存储方法

  请求表示由下载URL生成的下载请求

  响应表示下载结果,包括捕获的网页的内容

  

  创建项目类

  我们使用item类来封装从web页面解析的数据,这便于在各个模块之间传输和进一步处理。爬虫的item类非常简单。它直接继承scratch的item类,并定义相应的属性字段来存储数据。每个字段的类型为“scene.field()”,可用于存储任何类型的数据。现在看看我们的item类:

  

  创建spider类

  Spider类主要用于解析数据。它收录一些用于下载的初始URL以及从网页中提取链接和数据的方法。所有spider都必须从脚本继承。Spider类并实现三个属性:Name:Spider的名称

  start_uuURL:爬虫程序启动的URL列表

  Parse():解析捕获的网页内容。下载每个URL后,将调用此函数提取数据(并生成返回的item对象),提取并生成需要进一步处理的URL的request对象

  

  创建管道类

  Scrapy使用管道模块保存数据。也就是说,spider类的parse()方法返回的item对象将传递给管道中的类,管道将完成特定的保存工作。创建收录默认管道类的新scrapy项目时,将自动创建pipeline.py文件

  pipeline类将在进程中处理item()方法中的数据,然后在结尾调用close\uspider()方法,因此我们需要这两个方法来进行相应的处理

  

  运行爬虫

  在项目目录中,执行命令“scratch crawl double”,我们可以看到爬虫程序开始抓取网页

  总结

  现在让我们回顾一下我们的所有代码在scripy框架中是如何工作的:首先,scripy是一个场景,URL属性中每个URL的spider_uu的开始。创建请求对象,并将parse()方法作为回调函数传递给请求对象

  请求对象由框架调度。下载后,它获得scene.http.response对象,该对象被传递给spider的parse()方法进行解析

  spider的parse()方法解析数据并返回item对象,该对象被传递给管道对象的进程\ item()处理

  Pipeline process_uuItem()完成提取数据(项对象)的存储或任何所需的处理

  如果parse()方法解析一个新的URL并返回一个新的请求对象,那么在这个新的请求对象中会重复上述步骤,从而实现连续的数据获取

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线