【MOOC】Python网络爬虫与信息提取-北京理工大学-part 4

网络爬虫之框架

1.scrapy爬虫框架介绍

1.1.scrapy爬虫框架介绍

安装方法:
这里写图片描述

简要地说,Scrapy不是一个函数功能库,而是一个快速功能强大的网络爬虫框架。
(爬虫框架是实现爬虫功能的一个软件结构和功能组件集合,是一个半成品,能够帮助用户实现专业网络爬虫。)
这里写图片描述

scrapy爬虫框架的组成如下:
这里写图片描述

用户提交的网络请求以及从网络上获取的信息形成数据流,在这些模块间流动。
这里写图片描述

数据流的路径有:
这里写图片描述
这里写图片描述
这里写图片描述

数据流的出入口:
这里写图片描述

框架中有两个模块是需要用户编写的(可理解为 为框架进行配置),另外的三个是已经实现的。
这里写图片描述

1.2.scrapy爬虫框架解析

Engine
(1) 控制所有模块之间的数据流
(2) 根据条件触发事件
(3)不需要用户修改

Downloader
(1)根据请求下载网页
(2)不需要用户修改

Scheduler
(1)对所有爬取请求进行调度管理
(2)不需要用户修改

Downloader Middleware(Middleware是中间设备之意)
(1)目的:实施Engine、 Scheduler和Downloader之间进行用户可配置的控制
(2)功能:修改、丢弃、新增请求或响应
(3)用户可以编写配置代码

Spider
(1) 解析Downloader返回的响应(Response)
(2) 产生爬取项(scraped item)
(3) 产生额外的爬取请求(Request)
(4)需要用户编写配置代码

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

1.3.requests库和scrapy爬虫的比较

相同点:
两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
两者可用性都好,文档丰富,入门简单
两者都没有处理js、提交表单、应对验证码等功能(可扩展)

具体区别:
这里写图片描述

那么选用哪个技术路线开发爬虫呢?

具体看情况,对于非常小的需求,使用requests库;对于不太小的需求,使用Scrapy框架。
而对于定制程度很高的需求(不考虑规模),最好选择自搭框架(requests > Scrapy)。

1.4.scrapy爬虫的常用命令

Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行。命令格式:
这里写图片描述

常用的命令:
这里写图片描述

为什么Scrapy采用命令行创建和运行爬虫?

命令行(不是图形界面)更容易自动化,适合脚本控制。而本质上,Scrapy是给程序员用的,功能(而不是界面)更重要。

2.scrapy爬虫框架介绍

2.1.scrapy爬虫的第一个实例

演示HTML页面地址:http://python123.io/ws/demo.html
这里写图片描述

首先要有一个概念:应用Scrapy爬虫框架主要是编写配置型代码

实例步骤:

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

选取一个目录(如E:\Code\),然后执行如下命令:

scrapy startproject mydemo

等待一段时候后,可以看到输出如下:
这里写图片描述

而在对应目录下有python123demo这个文件夹(其实就是工作目录)生成
这里写图片描述

工作目录的细节解释:
这里写图片描述

而spiders目录的内部目录解释如下,用户自定义的spider代码就是增加在此处。
这里写图片描述

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

进入工程目录(E:\Code\python123demo),然后执行如下命令:

scrapy genspider demo python123.io

该命令作用:

(1) 生成一个名称为demospider

(2) 在s**piders目录下增加代码文件**demo.py

注意:该命令仅用于生成demo.py,该文件也可以手工生成

对应输出:
这里写图片描述

打开demo.py后,显示如下:

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


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

    def parse(self, response):
        pass

其中parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求。

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

配置:(1)初始URL地址 (2)获取页面后的解析方式
修改demo.py为:

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


class DemoSpider(scrapy.Spider):
    name = "demo"
    #allowed_domains = ["python123.io"]#可选
    #配置初始URL地址
    start_urls = (
        'http://www.python123.io/ws/demo.html',
    )

    def parse(self, response):
        #配置获取页面后的解析方式:将捕获页面存储在demo.html
        fname=response.url.split('/')[-1]
        with open(fname,'wb') as f:
            f.write(response.body)
        self.log('Save file %s.'% fname)

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

在命令行下,执行如下命令:

scrapy crawl demo

显示的部分效果为:
这里写图片描述

demo爬虫被执行后,捕获页面存储在demo.html。打开python123demo目录,可以看到demo文件。
这里写图片描述

至此,第一个实例已经完成了。

而在实际使用scrapy库时,在实际编写代码的时候,将上面的demo.py改写成如下的形式(等价的)会更好。

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


class DemoSpider(scrapy.Spider):
    name = "demo"
    #allowed_domains = ["python123.io"
  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值