scrapy项目入门指南

Scrapy简介

一种纯python实现的,基于twisted异步爬虫处理框架。优点

基本组件概念

Scrapy主要包含5大核心组件

  1. 引擎(scrapy)
  2. 调度器(Scheduler)
  3. 下载器(Downloader)
  4. 爬虫(Spiders)
  5. 项目管道(Pipeline)

项目实践

开发环境: win10 + python3.6 + scrapy2.4.1

1、项目创建

首先进入CMD命令窗口,输入如下命令:

scrapy startproject xxxx  #xxxx代表你要创建的项目名

执行命令后会生成相应的项目文件,如下所示:
在这里插入图片描述
各文件结构作用说明:

  1. spiders目录: 负责存放继承自scrapy的爬虫类。里面主要是用于分析response并提取返回的item或者是下一个URL信息,每个Spider负责处理特定的网站或一些网站。
  2. _init_.py: 项目的初始化文件。
  3. items.py: 负责数据模型的建立,类似于实体类。定义我们所要爬取的信息的相关属性。Item对象是种容器,用来保存获取到的数据。
  4. middlewares.py: 自己定义的中间件。可以定义相关的方法,用以处理蜘蛛的响应输入和请求输出。
  5. pipelines.py: 负责对spider返回数据的处理。在item被Spider收集之后,就会将数据放入到item pipelines中,在这个组件是一个独立的类,他们接收到item并通过它执行一些行为,同时也会决定item是否能留在pipeline,或者被丢弃。
  6. settings.py: 负责对整个爬虫的配置。提供了scrapy组件的方法,通过在此文件中的设置可以控制包括核心、插件、pipeline以及Spider组件。常见配置参数
  7. scrapy.cfg: scrapy基础配置,scrapy项目如何通过scrapy.cfg切换配置文件

2.在item.py文件中定义实体数据

如:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

class ZhilianItem(scrapy.Item):
    job =scrapy.Field()

    number = scrapy.Field()

    company = scrapy.Field()   #公司名称

    logo = scrapy.Field() #公司logo

    website = scrapy.Field()  #公司主页

    # positionUrl = scrapy.Field()   #职位首页

    city = scrapy.Field()   #工作城市

    job_place = scrapy.Field()  #工作地点

    min_wage = scrapy.Field()

    max_wage = scrapy.Field()

    education = scrapy.Field()

    industry = scrapy.Field()  #公司属性 property

    scale= scrapy.Field()  #公司规模

    post_type = scrapy.Field()  #job_type

    job_experience = scrapy.Field()

    job_benefits = scrapy.Field()

    job_duty = scrapy.Field()  #工作城市,为空

    update_time = scrapy.Field()

3.在spiders目录中编写具体爬虫文件

编写第一个scrapy蜘蛛,最后通过yield item语句可将数据送入piplines组件中执行数据固化操作。

4.编写piplines组件(需要激活),用于存储item数据

scrapy框架之Pipeline管道类
Scrapy用Pipeline写入MySQL
爬虫 异步数据写入框架 (adbapi)

5.启动爬虫

方式一, 在cmd命令行中输入如下命令:

scrapy crawl  xxxx #xxxx为定义在某个spiders组件中的name

方式二, 通过编写python文件,此文件位于spiders文件夹中:

# -*- coding: utf-8 -*-
#  主程序入口
from scrapy.cmdline import execute
# cmd运行命令行程序
execute(['scrapy', 'crawl', 'xxxx']) #xxxx为定义在某个spider组件中的name

其它

动态传参

python scrapy 传入自定义参数需要注意的几点,使用-a传参时,当具有多个参数是,使用多个-a命令即可:如:

scrapy carwl 爬虫名 -a arg1=argval -a arg2=argval2

采用execute方法执行时,同理,如:

 execute(f"scrapy crawl ZhiLianSpider -a log_file_name={log_file_name} -a job_type_str={job_type_str}".split())

部署web端scrapy项目

参考: spider-通过scrapyd网页管理工具执行scrapy框架
所需python包(本地测试时,一个电脑既可以是服务器端也可以是客户端):

  1. pip install scrapyd (服务器端)
  2. pip install scrapyd-deploy (客户端)
  3. pip install pywin32

可通过scrapyd-deploy将scrapy项目部署(部署前需要在scrapy项目中的.cfg文件中进行相关配置)到装有scrapyd组件上的服务器上,即可通过url链接控制scrapy爬虫项目的相关执行流程。可通过访问服务器端URL链接的方式(如http://127.0.0.1:6800/)来监控当前爬虫状态。

动态传参

参数定义方式和命令行运行项目时一样,不同的是传递参数的过程是通过url来执行的,如:

http://localhost:6800/schedule.json
(post方式,data={"project":myproject,"spider":myspider,"arg1":arg1val})

data参数也可拼接在url后面,通过?和&连接。

除此之外,也可通过curl命令进行访问,如:

curl http://localhost:6800/schedule.json -d project=ZhiLian -d spider=ZhiLianSpider -d log_file_name=test -d job_type_str=ss

除此之外,还可通过访问其它Url链接来获取当前爬虫的执行状态。
详参: django–中运行scrapy框架
PS: 每次修改更新scrapy项目后,都要保存重新部署项目。

参考文献

Scrapy项目结构分析和工作流程
Scrapy 入门教程
Scrapy中文网
官方文档

猜你喜欢

转载自blog.csdn.net/qq_35268841/article/details/112525900