scrapy框架-入门

本文介绍了Scrapy爬虫框架的入门知识,包括框架的组件介绍、安装步骤、使用流程和常见应用场景。详细讲解了从创建项目、配置爬虫、处理网页数据到保存数据到文件或数据库的过程,同时涉及反爬虫策略的动态修改。
摘要由CSDN通过智能技术生成

scrapy框架


一:框架介绍

Scrapy 是一个快速的高级网页爬行和网页抓取框架,用于抓取网站并从其页面中提取结构化数据。它可用于广泛的用途,从数据挖掘到监控和自动化测试


二、框架安装(尽量新建一个python环境,以免导致包冲突

Windows:

conda安装:(个人安装步骤)

1、conda创建新环境;
2、进入环境activate scrapy_env,并使用pip安装:

①、pip install pypiwin32
②、pip install scrapy

pip安装:

1、pip install pypiwin32
2、pip install scrapy

Linux:

pip安装:pip install scrapy;(未测)

Ubuntu:

1、需要先安装依赖库:
sudo apt-get install python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
2、然后pip安装:pip install scrapy

Mac:

conda安装:(个人安装步骤)

1、conda创建新环境;
2、进入环境,并使用pip安装:

①、pip install scrapy

pip安装:pip install scrapy;(未测);
注:如果依然有问题,请访问:
安装指南


三、框架使用(默认使用scrapy虚拟环境


3.1、框架组件详解

框架组件

3.1.1、组件介绍
引擎(Engine)

Engine负责控制系统所有组件之间的数据流,并在发生某些动作时触发事件(框架核心);

爬虫文件(Spider)

Spider 是由用户编写的自定义的类。 一方面用于从特定网页的Response中提取自己需要的信息, 即所谓的项目数据(Item)。另一方面也可以从中提取出Request,让Scrapy项目继续爬取下一个页面;

蜘蛛中间件(Spider Middlewares)

Spider 中间件是位于 EngineSpider之间的特定组件,能够处理Spider的输入(Response)和输出(ItemRequest);

  • 如果您需要执行以下操作之一,请使用Spider Middlewares
    • 根据Response内容为某些请求调用errback函数而不是callback函数
    • Spider回调的输出做处理 - 更改/添加/删除ItemRequest
    • 处理Spider异常;
    • start_requests迭代器做处理;
调度器(Scheduler)

用来接受Engine发过来的请求, 压入队列中, 并在Engine再次请求的时候返回。可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么,同时去除重复的网址;

下载器(Downloader)

用于下载网页内容, 并将网页内容返回给Engine继而返回给Spider(Scrapy下载器是建立在twisted这个高效的异步模型上的);

下载器中间件(Downloader Middlewares)

下载器中间件是位于EngineDownloader之间的特定组件,并在RequestEngine传递到Downloader时处理Request,以及从Downloader传递到EngineResponse

  • 如果您需要执行以下操作之一,请使用Downloader Middlewares
    • 在将Request发送到Downloader之前处理Request(即在 Scrapy 将Request发送到网站之前);
    • 在将Response传递给Engine之前更改收到的Response
    • 发送一个新的Request而不是将接收到的Response传递给Engine
    • Response传递给Engine而不获取网页;
    • 默默地放弃一些Request
管道(Item Pipelines)

负责处理Spider从网页中抽取的Item,主要的功能是持久化Item、验证Item的有效性、清除不需要的Item。当页面被Spider解析后,结果将被发送到Item Pipelines,并经过几个特定的次序来处理Item

3.1.2、执行流程:

1、该Engine(引擎)从Spider(蜘蛛)中获取最初Requests(请求)进行爬行;
2、该EngineRequests安排在Scheduler(调度器),并且要求下一个Requests进行爬行;
3、该Scheduler返回下一个请求到Engine
4、该Engine通过Downloader Middlewares(下载器中间件)发送RequestsDownloader(下载器)(见process_request());
5、一旦页面完成下载,Downloader会生成一个Response(响应)(带有该页面)并通过Downloader Middlewares将其发送到Engine(见process_response());
6、该Engine接收到来自DownloaderResponse,并通过Spider Middlewares(蜘蛛中间件)将其发送到Spider进行处理(见 process_spider_input());
7、该Spider处理Response并通过Spider Middlewares返回网上下载的items(项目)和新的Requests(为了跟进)到Engine,(见 process_spider_output());
8、该Engine发送已处理的items到Item Pipelines,然后发送已处理的RequestsScheduler,并要求可能的Requests进行爬行;
9、该过程重复(从第 1 步开始),直到不再有来自Scheduler的请求 ;

文档:架构概览Downloader MiddlewareSpider MiddlewareRequests and Responses


3.2、前期准备(常用

1、首先切换到虚拟环境,使用activate命令;
2、创建scrapy项目。命令为:scrapy startproject <project_name> [project_dir],并切换到项目目录;

project_name:项目名称;
project_dir:项目所在的文件夹;

3、创建项目的spider文件,并定义爬虫类型以及可用域名。命令为:scrapy genspider [-t template] <name> <domain>

-t:制定爬虫模板,若无此参数,即为普通爬虫;
name:爬虫文件名称;
domain:允许访问的域名,其他域名不进行访问;

至此已经生成了指定爬虫模板指定域名的爬虫项目;

文档:命令行工具


3.3、单机爬虫(默认已做好前期准备)

:需要将settings.py文件中的ROBOTSTXT_OBEY属性设置为False,即不遵守机器人协议;否则会报错:ModuleNotFoundError: No module named 'protego'
建议:将DEFAULT_REQUEST_HEADERS(默认请求头)和DOWNLOAD_DELAY(下载延迟)参数放开,并向DEFAULT_REQUEST_HEADERS中添加User-Agent,以及修改DOWNLOAD_DELAY为1;
默认知识:已经大致了解html、js、xpath(个人常用)、css、selector等网页知识以及python入门;


3.3.1、简单scrapy案例

注:演示可执行的简单scrapy项目,不需要任何逻辑;

1、一般情况下,先将start_urls修改为最初的url(即第一个进行爬虫的url)
2、给wxapp_spider.py文件下的parse(解析)函数添加逻辑,如:(第6步使用

class WxappSpiderSpider(scrapy.Spider):
    name = 'wxapp_spider'
    allowed_domains = ['wxapp-union.com']
    start_urls = ['https://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1']
    
    def parse(self, response, **kwargs):
        print(response.url)

3.1、在命令行中,切换到项目目录并切换到scrapy_env环境中,执行scrapy crawl wxapp_spider,即可运行该爬虫项目;
3.2、在pycharm中创建一个start_scrapy.py文件并在pycharm工具中执行该文件,文件内容如下(其中./代表与spider文件同一文件夹):

from scrapy import cmdline
import os

if __name__ == '__main__':
    files 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值