3月25日
项目系统需要构建爬虫模块,使用爬虫技术从网络上获取到本年度的校招岗位信息,并作为项目中推荐系统的数据集,实现对项目结果的真实场景运用。
此项目中的爬虫模块主要运用Scrapy架构,基于Python语言实现。近期我学习了Scrapy框架的相关知识,并且在本机上搭建好了系统的爬虫架构,在此有一些体会与收获。
Scrapy架构的学习:
系统架构图(图源:Scrapy官方文档):
通过我对相关资料的搜索与总结,认识到Scrapy中7大架构的具体功能如下:
- Scrapy Engine
引擎负责控制数据流在系统所有组件中的流动,并在相应动作发生时触发事件;它也是程序的入口,可以通过scrapy指令方式在命令行启动。 - 调度器(Scheduler)
调度器从引擎接收爬取请求(Request)并将它们入队,以便之后引擎请求它们时提供给引擎。 - 下载器(Downloader)
下载器负责处理产生最终发出的请求对象Request并将返回的响应生成Response对象传递给爬虫。 - 爬虫——Spiders
Spiders是用户编写用于分析响应(Response)结果并从中提取Item字段需要的数据,将需要访问的URL提交给引擎。 - 数据管道——Item Pipeline
Item Pipeline负责处理从Spider中获取到的Item,包含清理、验证、持久化处理。 - 下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间,处理Downloader传递给引擎的Response,可以自定义扩展下载功能的组件。 - Spider中间件(Spider middlewares)
Spider中间件是在引擎及Spider之前,处理Spider的输入(Response)和输出(Items和Requests),可以自定义扩展Scrapy的功能。
Scrapy的构建步骤:
使用pip安装Scrapy:
pip install Scrapy
在命令行中键入scrapy,会看到以下的提示内容:
Scrapy 2.4.1 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
commands
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
创建Scrapy的爬网项目时,可以运行startproject指令参数直接初始化Scrapy项目:
scrapy startproject JobSpider
文件内容的解析:
框架会自动在当前目录下创建一个同名的文件夹JobSpider,经过代码的阅读与理解,查找了相关资料进行学习,项目文件结构如下:
- scrapy.cfg:项目的配置文件
- JobSpider文件夹:
- 放置spider代码的目录spriders,爬虫文件将创建到此目录中。
- init.py:声明了这个文件夹是一个Python包。
- items.py:需要提取的数据结构定义文件。
- middlewares.py:是和Scrapy的请求/响应处理相关联的框架。
- pipelines.py:用来对items里面提取的数据做进一步处理,如保存等。
- settings.py:项目的配置文件。
执行结果:
明白了Scrapy爬虫框架的原理与使用之外,我阅读了一些爬虫功能实现的相关资料,尝试写了一些爬虫的文件,对爬虫框架的使用进行测试。通过框架的搭建与使用,成功地完成了对测试内容的爬取。
在下个阶段,将基于爬虫框架,实现对招聘网站中本年度校招信息的爬取,并进行解析与存储,通过多个平台的信息爬取与收集,逐步完善爬虫模块。
参考书目:《虫术:Python绝技》(电子工业出版社)