scrapy架构与爬虫搭建

介绍

Scrapy是Python开发的一个爬虫框架,可以用于数据挖掘、监测和自动化测试、信息处理等领域,它使用Twisted个异步网络库来处理网络通讯,架构清晰,包含了各种中间件接口,可以灵活的完成各种需求。

1、scrapy架构、流程与组件

1.1、整体架构图

spiders > scheduler > downloader > spiders > item pipeline
整体架构

1.2、整体处理流程

1、引擎从调度器中取出一个url用于接下来的爬取
2、引擎把url封装成一个Request请求传给下载器
3、下载器下载资源后返回响应数据Response
4、爬虫解析Response
5、解析出的实体数据Item交给管道处理
6、解析出的url再次交给调度器等待爬取

1.3、主要组件

组件说明
引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心)
调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回,可以看做一个URL优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
下载器(Downloader)用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
爬虫(Spiders)爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
项目管道(Pipeline)负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据
下载器中间件(Downloader Middlewares)位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应
爬虫中间件(Spider Middlewares)介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出
调度中间件(Scheduler Middewares)介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应

2、安装

安装Scrapy:pip3 install Scrapy
安装pypiwin32:pip install pypiwin32

3、基本用法

4.1、创建项目

在对应项目下执行命令scrapy startproject xxxx(xxxx指项目名称),即可初始化项目

D:\3.dev\pyworkspace\scraw\test01>scrapy startproject scrapy01
New Scrapy project 'scrapy01', using template directory 'c:\users\fxkp\appdata\local\programs\python\python36\lib\site-packages\scrapy\templates\project', created in:
    D:\3.dev\pyworkspace\scraw\test01\scrapy01

You can start your first spider with:
    cd scrapy01
    scrapy genspider example example.com

4.2、目录结构

目录结构如下:
在这里插入图片描述

目录/文件说明
spiders爬虫目录,如:创建文件,编写爬虫规则
items.py设置数据存储模板,用于结构化数据
pipelines数据处理行为,如:一般结构化的数据持久化
settings.py配置文件,如:递归的层数、并发数,延迟下载等
scrapy.cfg项目的配置信息,主要为Scrapy命令行工具提供一个基础的配置信息。(真正爬虫相关的配置信息在settings.py文件中)

4.3、编写爬虫文件

创建爬虫文件,进入到scrapy01目录下,执行命令scrapy genspider 爬虫名称 站点域名,如下会自动生成baidu.py爬虫文件

D:\3.dev\pyworkspace\scraw\test01\scrapy01>scrapy genspider baidu baidu.com
Created spider 'baidu' using template 'basic' in module:
  scrapy01.spiders.baidu

baidu.py文件内容如下

# -*- coding: utf-8 -*-
import scrapy

class BaiduSpider(scrapy.Spider):
    # 爬虫名称
    name = 'baidu'
    # 爬虫允许访问的域
    allowed_domains = ['baidu.com']
    # 初始访问地址(手动修改为自己想要的地址)
    start_urls = ['http://www.baidu.com/']

    def parse(self, response):
        print(response.text)

修改settings.py文件中的USER_AGENTROBOTSTXT_OBEY配置

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

4.3、编写启动脚本

scrapy01目录下创建start.py脚本,编写如下启动命令,这样就可以运行baidu爬虫

from scrapy.cmdline import execute

# 启动命令
execute('scrapy crawl baidu'.split())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值