Scrapy框架(学习笔记)

Scrapy框架介绍

功能强大的网络爬虫框架

不是一个简单的函数功能库,而是一个爬虫框架

爬虫框架:是实现爬虫功能的一个软件结构和功能组件集合,是一个半成品,能够根据用户需求帮助用户快速实现专业网络爬虫,约束了一个使用模板。

Scrapy爬虫框架结构:
七个部分(5+2结构)
Scrapy框架(学习笔记)_第1张图片

scrapy爬虫框架解析

ENGINE :控制所有模块的数据流并根据条件出发事件进行出发(不需要用户修改)

Downloader Middleware(中间界):实施Engine、Scheduler和Downloader之间的数据流进行用户可配置的控制,即通过中间界的编写修改、丢弃、新增请求或相应。(用户可以 编写代码,也可以不改)

DOWNLOADER:根据用户提供的请求下载网页(不需要用户修改)

SCHEDULER:对所有爬取请求进行调度管理;很多爬取请求先调度的问题(不需要用户修改)

SPIDERS:解析Downloader返回的响应(Response),产生爬取项(scrapy item),产生额外的爬取请求;向整个框架提供了最初始的访问连接,同时对每次爬取回来的内容进行解析再次产生新的爬取请求(因为使用了yield),并且从内容提取出相关的数据;是最核心的单元(自己写)

Spider Middleware(spider和engine之间的中间界): 对请求和爬取项进行再处理。功能:修改、丢弃、新增请求或爬取项。(用户可以编写代码)

ITEM PIPELINES:以流水线处理spiders产生的爬取项,由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型。可能操作包括:对Item进行清理、检验和查重爬取项中的HTML数据、将数据存储到数据库。完全有用户编写和定义。用户需要关注如何使用爬取出来的数据

Requests和Scrapy的比较

  1. 都可以进行页面请求和爬取,Python爬虫的两个重要技术路线;
  2. 两者可用性都好,文档丰富,入门简单;
  3. 都没有提供对js、提交表单、对应验证码等功能(需要拓展额外的库)。


requests:页面级爬虫; 功能库; 并发性考虑不足,性能较差; 重点在于页面下载; 定制灵活; 上手十分简单。
Scrapy: 网站级爬虫; 框架(更改为支撑一个爬虫的整体结构);并发性好(可以向多个网站同属发起请求),性能较高;重点在于爬取结构(配置型的代码编写); 一般使用灵活,深度定制困难; 入手稍微较难一点。

=====================================================================
对于非常小的网络爬取请求用requests,
不太小的需求,持续的不间断的想形成爬取库用scrapy
定制程度很高的需求(不考虑规模),自搭框架,requests>Scrapy(5+2结构此时会成为限制)。

Scrapy的安装

安装:pip install scrapy

建议在pythoncharm下安装,命令行安装参考 使用pip安装scrapy过程
在pycharm下也是需要手动安装好wheel、lxml和twisted,都是pip install scrapy格式,都安装完成后看看有没有成功运行
scrapy -h
Scrapy框架(学习笔记)_第2张图片
显示这个就是成功了。

Scrapy常用命令

Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行

scrapy < command >[options][args]
Scrapy框架(学习笔记)_第3张图片

工程与爬虫的关系:
一个工程是一个最大的单元 ,一个工程可以相当于一个大的Scrapy框架,在Scrapy框架中可以有多个爬虫,每个爬虫相当于框架中一个Spider模块。

Scrapy使用命令行进行操作原因:并不是为了给用户操作使用的,命令行(不是图形界面)更容易自动化,适合脚本控制。程序更关心指令,用户才更关心图形界面。本质上是给程序员用的,功能而不是界面更重要

用实例说明步骤:

1.产生一个scrapy爬虫框架

scrapy startproject python123demo#创建一个名为python123demo的新工程

在这里插入图片描述
可以看见生成了一个文件
Scrapy框架(学习笔记)_第4张图片
打开文件:
Scrapy框架(学习笔记)_第5张图片
可以看到这些目录
Scrapy框架(学习笔记)_第6张图片
Scrapy框架(学习笔记)_第7张图片
2. 在工程中产生一个Scrapy爬虫

输入scrapy genspider demo python123.io
产生一个名为demo的爬虫

 D:\python123demo>scrapy genspider demo python123.io

可以看见在spider目录下增加了一个代码demo.py
Scrapy框架(学习笔记)_第8张图片
打开:
Scrapy框架(学习笔记)_第9张图片
3. 配置产生的spider爬虫
修改demo.py文件

import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    #allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']#更改链接成所要爬取的链接

    def parse(self, response): #对返回页面进行解析、操作。response即返回的对象
        fname = response.url.split('/')[-1]
        with open(fname,'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)#将网页内容保存为一个HTML文件

4.运行爬虫,获取网页

命令行输入:scrapy crawl demo
运行爬虫demo

D:\python123demo>scrapy crawl demo

打开目录可见生产了一个demo.html文件
Scrapy框架(学习笔记)_第10张图片

yield关键字的使用

yield是python3中33个关键字之一;
名为生成器——一个不断产生值的函数;
一个函数包含yeild语句这个函数就是一个生成器;
生成器每次运行的时候回产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值(与被冻结时候的位置一致);
每次执行就会产生一个数据,多次执行就会源源不断产生很多值。

写法:一般与循环搭配

def gen(n):
	for i in range(n):
		yeild i**2#执行到这就被冻结,当前yield这一行产生的值会被返回出来,首先产生0的平方值然后逐渐遍历这个循环

优势(相比列表):更好节省存储空间;具有更快的响应速度;使用更加灵活
每调用一次只产生一个值,这个值返回之后再调用产生第二个值,只使用一个存储空间

Scrapy爬虫的基本使用

  1. 创建一个工程和spider模板
  2. 编程spider
  3. 编写Item Pipeline
  4. 优化配置策略

Request类:向网络上提交请求的内容
表示一个request类对象,,表示一个HTTP请求
由spider生产,由Downloader执行
与requests不同但是很相似
6个常用属性或方法:
Scrapy框架(学习笔记)_第11张图片
Response类:从网页中爬取内容的封装类
Response对象表示一个HTTP响应
由于Downloader生产,由Spider处理
7个常用属性或方法
Scrapy框架(学习笔记)_第12张图片
Item类:由Spider产生的信息封装的类
对象表示从一个HTML页面中提取的信息内容
由spider生产,由Item Pipeline处理
Item类似字典类型,可以按照字典类型进行操作

scrapy爬虫提取信息方法
Beautiful Soup
Ixml
re
XPath Selector
Css Selector

Css Selector的基本使用

国际公认的HTML提取方法之一## 标题

< HTML>.css(‘a::attr(href)’).extract()
(标签名称。标签属性)
由W3C组织维护并规范

你可能感兴趣的:(爬虫,python)