从网页抓取数据(Scrapy编写简单爬虫:你在读源码的过程中发生了什么)

优采云 发布时间: 2022-04-19 02:30

  从网页抓取数据(Scrapy编写简单爬虫:你在读源码的过程中发生了什么)

  1 Scrapy 简介

  使用 Scrapy 的版本是 2.5.0

  用 Scrapy 开发爬虫非常简单。下面是一个 Scrapy 的例子来说明如何编写一个简单的爬虫:

  import scrapy

class IfengSpider(scrapy.Spider):

name = 'ifeng'

allowed_domains = ['ifeng.com']

start_urls = ['https://ifeng.com/']

def parse(self, response, **kwargs):

requests = response.follow_all(xpath='//ul[@id="nav"]/li/a/@href')

print(list(requests))

for row in response.xpath('//ul[@id="nav"]/li/a/@href').extract():

yield {

"url": row,

}

pass

  简单来说,编写和运行爬虫只需要以下步骤:

  使用scrapy startproject命令创建爬虫模板,或者根据模板编写爬虫代码定义爬虫类,继承scrapy.Spider,然后重写parse方法。在parse方法中编写网页解析逻辑,使用scrapy runpider在爬取路径上运行爬虫。

  可以看出,使用Scrapy写几行代码,就可以采集到一个网站页面的数据,非常方便。

  但是幕后发生了什么?Scrapy 究竟是如何帮助我们工作的?

  2 架构

  要了解 Scrapy 是如何工作的,首先让我们看一下 Scrapy 的架构图,从宏观的角度来看它是如何工作的:

  

  从架构图中可以看出,Scrapy主要包括以下五个模块:

  如果仔细观察,可以看到还有两个模块:

  了解了这些核心模块之后,我们再来看看使用Scrapy时内部的采集流程是如何流动的,也就是各个模块是如何交互协作完成整个爬取任务的。

  3 核心模块协同

  可以看出,Scrapy的架构图比较清晰,各个模块相互配合完成爬取任务。

  看了它的源码后,整理了一张比较详细的核心模块交互图,里面展示了比较多的模块相关细节,可以参考:

  4 核心类图

  

  简单解释一下这个核心类图:

  在阅读源码的过程中,可以重点关注这些核心属性和方法。

  结合官方的架构图和我总结的核心模块交互图和核心类图可以看出,Scrapy涉及的组件主要有以下几个。

  我们先对Scrapy的整个架构有个初步的了解。在下面的文章中,我将对上述类和方法进行更详细的源码解释。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线