从网页抓取数据(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的整个架构有个初步的了解。在下面的文章中,我将对上述类和方法进行更详细的源码解释。