爬虫mooc第四周笔记

Scrapy爬虫

Scrapy爬虫框架结构

爬虫框架是实现爬虫功能的一个软件结构和功能组件的集合

5+2结构

三个路径之一

1 Engine从Spider处获得爬取请求(Request)
2 Engine将爬取请求转发给Scheduler,用于调度

三个路径之二

3 Engine从Scheduler处获得下一个要爬取的请求
4 Engine将爬取请求通过中间件发送给Downloader
5 爬取网页后,Downloader形成响应(Response)
通过中间件发给Engine
6 Engine将收到的响应通过中间件发送给Spider处理

三个路径之三

7 Spider处理响应后产生爬取项(scraped Item)
和新的爬取请求(Requests)给Engine
8 Engine将爬取项发送给Item Pipeline(框架出口)
9 Engine将爬取请求发送给Scheduler

数据流的出入口

Engine控制各模块数据流,不间断从Scheduler处
获得爬取请求,直至请求为空
框架入口:Spider的初始爬取请求
框架出口:Item Pipeline
在这里插入图片描述

Scrapy爬虫框架解析

Engine(无需用户修改)

(1) 控制所有模块之间的数据流
(2) 根据条件触发事件

Downloader(无需用户修改)

根据请求下载网页

Scheduler(无需用户修改)

对所有爬取请求进行调度管理

Downloader Middleware(用户可以编写配置代码)

目的:实施Engine、Scheduler和Downloader
之间进行用户可配置的控制
功能:修改、丢弃、新增请求或响应
用户可以编写配置代

Spider (需要用户编写配置代码)

(1) 解析Downloader返回的响应(Response)
(2) 产生爬取项(scraped item)
(3) 产生额外的爬取请求(Request)

Item Pipelines (需要用户编写配置代码)

(1) 以流水线方式处理Spider产生的爬取项
(2) 由一组操作顺序组成,类似流水线,每个操
作是一个Item Pipeline类型
(3) 可能操作包括:清理、检验和查重爬取项中
的HTML数据、将数据存储到数据库

Spider Middleware(用户可以编写配置代码)

目的:对请求和爬取项的再处理
功能:修改、丢弃、新增请求或爬取项

Scrapy命令行

Scrapy常用命令

命令说明格式
startproject创建一个新工程scrapy startproject <name> [dir]
genspider创建一个爬虫scrapy genspider [options]<name><domain>
settings获得爬虫配置信息scrapy settings [options]
crawl运行一个爬虫scrapy crawl <spider>
list列出工程中所有爬虫scrapy list
shell启动URL调试命令行scrapy shell [url]

Scrapy爬虫实例一

演示HTML页面地址: http://python123.io/ws/demo.html
应用Scrapy爬虫框架主要是编写配置型代码

步骤1:建立一个Scrapy爬虫工程

选取一个目录(D:\pycodes\),然后执行如下命令:
d:\pycodes>scrapy startproject python123demo
生成目录
python123demo/ ————————外层目录
  scrapy.cfg ————————部署Scrapy爬虫的配置文件
  python123demo/ ——————Scrapy框架的用户自定义Python代码
    __init__.py ——————初始化脚本
    items.py ————————Items代码模板(继承类)
    middlewares.py —————Middlewares代码模板(继承类)
    pipelines.py ——————Pipelines代码模板(继承类)
    settings.py ——————Scrapy爬虫的配置文件
    spiders/ ————————Spiders代码模板目录(继承类)
    __pycache__ ——————缓存目录,无需修改

spider目录

spiders/ ————————————Spiders代码模板目录(继承类)
  init.py——————初始文件,无需修改
  pycache/——————缓存目录,无需修改
内层目录结构         用户自定义的spider代码增加在此处

步骤2:在工程中产生一个Scrapy爬虫

进入工程目录(D:\pycodes\python123demo),然后执行如下命令:
d:\pycodes\python123demo>scrapy genspider demo python123.io
该命令作用:
(1) 生成一个名称为demo的spider
(2) 在spiders目录下增加代码文件demo.py
该命令仅用于生成demo.py,该文件也可以手工生成

demo.py文件
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/']

    def parse(self, response):
        pass

步骤3:配置产生的spider爬虫

配置:(1)初始URL地址(2)获取页面后的解析方式

步骤4:运行爬虫,获取网页

在命令行下,执行如下命令:
d:\pycodes\python123demo>scrapy crawl demo
demo爬虫被执行,捕获页面存储在demo.html

yield 关键字的使用

包含yield语句的函数是一个生成器
生成器每次产生一个值 (yield语句)函数被冻结,被唤醒后再产生一个值
生成器是一个不断产生值的函数

生成器的优势

生成器相比一次列出所有内容的优势:
1)更节省存储空间
2)响应更迅速
3)使用更灵活

Scrapy爬虫的基本使用

使用步骤

**步骤1:**创建一个工程和Spider模板
步骤2: 编写Spider
步骤3: 编写Item Pipeline
步骤4: 优化配置策略

数据类型

Request类
Response类
Item类

Request类

class scrapy.http.Request()
Request对象表示一个HTTP请求
由Spider生成,由Downloader执行

属性或方法说明
.urlRequest对应的请求URL地址
.method对应的请求方法,‘GET’ 'POST’等
.headers字典类型风格的请求头
.body请求内容主体,字符串类型
.meta用户添加的扩展信息,在Scrapy内部模块间传递信息使用
.copy()复制该请求
Response类

class scrapy.http.Response()
Response对象表示一个HTTP响应
由Downloader生成,由Spider处理

属性或方法说明
.urlResponse对应的URL地址
.statusHTTP状态码,默认是200
.headersResponse对应的头部信息
.bodyResponse对应的内容信息,字符串类型
.flags一组标记
.request产生Response类型对应的Request对象
.copy()复制该响应
Item类

class scrapy.item.Item()
Item对象表示一个从HTML页面中提取的信息内容
由Spider生成,由Item Pipeline处理
Item类似字典类型,可以按照字典类型操作

Scrapy 爬虫提取信息的方法

Scrapy爬虫支持多种HTML信息提取方法:
• Beautiful Soup
• lxml
• re
• XPath Selector
• CSS Selector

CSS Selector的基本使用

<HTML>.css(‘a::attr(href)’).extract()

CSS Selector由W3C组织维护并规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值