一. 课程安排

  • 课程内容
    • Scrapy介绍
    • Scrapy工作流程
    • Scrapy入门
    • pipline使用

二. 课堂笔记

1. Scrapy介绍

  • 什么是Scrapy

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取

Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度

http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

  • 异步和非阻塞的区别

1.png

异步:调用在发出之后,这个调用就直接返回,不管有无结果

非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程

2. Scrapy工作流程

2.png

另一种爬虫方式

3.png

Scrapy工作流程

4.png

Scrapy engine(引擎) 总指挥:负责数据和信号的在不同模块间的传递 scrapy已经实现
Scheduler(调度器) 一个队列,存放引擎发过来的request请求 scrapy已经实现
Downloader(下载器) 下载把引擎发过来的requests请求,并返回给引擎 scrapy已经实现
Spider(爬虫) 处理引擎发来的response,提取数据,提取url,并交给引擎 需要手写
Item Pipline(管道) 处理引擎传过来的数据,比如存储 需要手写
Downloader Middlewares(下载中间件) 可以自定义的下载扩展,比如设置代理 一般不用手写
Spider Middlewares(中间件) 可以自定义requests请求和进行response过滤 一般不用手写

3. Scrapy入门

  1. 1 创建一个scrapy项目
  2. scrapy startproject mySpider
  3. 2 生成一个爬虫
  4. scrapy genspider demo "demo.cn"
  5. 3 提取数据
  6. 完善spider 使用xpath
  7. 4 保存数据
  8. pipeline中保存数据

在命令中运行爬虫

  1. scrapy crawl qb # qb爬虫的名字

在pycharm中运行爬虫

  1. from scrapy import cmdline
  2. cmdline.execute("scrapy crawl qb".split())

4. pipline使用

从pipeline的字典形可以看出来,pipeline可以有多个,而且确实pipeline能够定义多个

为什么需要多个pipeline:

1 可能会有多个spider,不同的pipeline处理不同的item的内容

2 一个spider的内容可以要做不同的操作,比如存入不同的数据库中

注意:

1 pipeline的权重越小优先级越高

2 pipeline中process_item方法名不能修改为其他的名称