Scrapy爬虫框架

网络爬虫框架scrapy

(配置型爬虫)

什么是爬虫框架?

  • 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合
  • 爬虫框架是个半成品,帮助用户实现专业网络爬虫

scrapy框架结构(“5+2”结构)

  1. spider:
  • 解析downloader返回的响应(Response)
  • 产生爬取项(scraped item)
  • 产生额外的爬去请求(Request) 需要用户编写配置代码
  1. engine(引擎):
  • 控制所有模块之间的数据流
  • 根据条件触发事件 不需要用户修改
  1. scheduler(调度器):
  • 对所有爬取请求进行调度处理 不需要用户修改
  1. downloader(下载器):
  • 根据请求下载网页 不需要用户修改
  1. item pipelines():
  • 以流水线处理spider产生的爬取项
  • 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
  • 可能操作包括:清理、检验和查重爬取项中的HTML数据,将数据存储到数据库中 需要用户编写配置代码
  1. downloader middleware(中间件):
  • 目的:实施engine、scheduler和downloader之间进行用户可配置的控制
  • 功能:修改、丢弃、新增请求或响应 用户可以编写配置代码
  1. spider middleware(中间件):
  • 目的:对请求和爬去项的再处理
  • 功能:修改、丢弃、新增请求或爬取项 用户可以编写配置代码

数据流

  • 1.Engine从Spider处获得爬取请求(Request)
  • 2.Engine将爬取请求转发给Scheduler,用于调度
  • 3.Engine从Scheduler处获得下一个爬取的请求
  • 4.Engine将爬取请求通过中间件发送给Downloader
  • 5.爬取网页后,Downloader形成响应(Response),通过中间件(Middleware)发给Engine
  • 6.Engine将收到的响应通过中间件发送给Spider处理
  • 7.Spider处理响应后产生爬取项(scraped item)和新的爬取请求(Requests)给Engine
  • 8.Engine将爬取项发送给Item Pipeline(框架出口)
  • 9.Engine将爬取请求发送给Scheduler
  • Engine控制各模块数据流,不间断从Scheduler处获得爬取请求,直到请求为空
  • 框架入口:Spider的初始爬取请求
  • 框架出口:Item Pipeline

scrapy命令行

格式

scrapy <command> [options] [args]

** 常用命令 **

命令

说明

格式

startproject

创建一个新工程

scrapy startproject [dir]

genspider

创建一个爬虫

scrapy genspider [options] [domain]

settings

获得爬虫配置信息

scrapy settings [options]

crawl

运行一个爬虫

scrapy crawl

list

列出工程中所有的爬虫

scrapy list

shell

启动URL调试命令行

scrapy shell [url]

demohttps://python123.io/ws/demo.html

创建工程

scrapy startproject python123demo

创建爬虫

scrapy genspider demo python123.io
//生成了一个名为demo的spider
//在spider目录下增加代码文件demo.py(该文件也可以手工生成)    

** demo.py文件 **

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


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

    def parse(self, response):
        pass

配置产生的spider爬虫

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


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

    def parse(self, response):
        #存储文件名demo.html
        file_name = response.url.split('/')[-1]
        with open(file_name,"wb") as f:
            f.write(response.body)
            self.log('Saved file %s' % file_name)#日志

*** 另一个版本 **

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


class DemoSpider(scrapy.Spider):
    name = 'demo'
    #allowed_domains = ['python123.io']
    #start_urls = ['http://python123.io/ws/demo.html']
    def start_requests(self):
        urls = [
                   'http://python123.io/ws/demo.html'
               ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        #存储文件名demo.html
        file_name = response.url.split('/')[-1]
        with open(file_name,"wb") as f:
            f.write(response.body)
            self.log('Saved file %s' % file_name)#日志

运行爬虫

scrapy crawl demo

Scrapy爬虫数据类型

  • Request类
  • Response类
  • Item类

Request类

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

属性

方法

.url

Requests对应的请求URL地址

.method

对应的请求方法,’GEt’、’POST’等

.headers

字典类型风格的请求头

.body

请求内容主体,字符串类型

.meta

用户添加的扩展信息,在Scrapy内部模块间传递信息使用

.copy

复制该请求

Response类

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

属性或方法

说明

.url

Response对应的URL地址

.status

HTTP状态码,默认是200

.headers

Response对应的头部信息

.body

Response对应的内容信息,字符串类型

.flags

一组标记

.request

产生Response类型对应的Request对象

.copy()

复制该响应

Item类

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

Scrapy爬虫的使用步骤

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

scrapy爬虫信息提取方法

  • Beautifui Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 毕业设计(一):爬虫框架scrapy

    1、scrapy startproject Demo(项目名):创建一个新的项目。

    Cloud-Cloudys
  • Flask的请求钩子与上下文简记

    Flask的请求钩子通过装饰器实现,每个钩子可以注册任意多个处理函数,默认的五种请求钩子如下:

    Cloud-Cloudys
  • 跨域问题

    ​ 同源策略是一种约定。同源是指”协议+域名+端口”三者相同,就算两个不同的域名指向同一个ip地址,也不属于同源。

    Cloud-Cloudys
  • Tomcat和搜索引擎网络爬虫的攻防

    不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页。为什么会造成这种现象?这就要从网络爬虫说起了。

    Jerry Wang
  • Tomcat和搜索引擎网络爬虫的攻防

    不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页。为什么会造成这种现象?这就要从网络爬虫说起了。

    Jerry Wang
  • 让爬虫更加友好

            写一个爬虫去互联网上采集数据这件事情,看似好像对别人没有坏处,其实如果爬虫不断的去爬数据的话,会给爬取对象的网站造成很大的压力。所以我们往往会限...

    钱塘小甲子
  • AI in WAF︱腾讯云网站管家 WAF:爬虫 Bot 程序管理方案

    腾讯云安全
  • http、https、http2一些概念

    非对称加密,现在用的几乎都是非对称加密,自己有一个密钥对公钥和私钥,公钥可以给任何人知道,别人通过公钥加密发数据给自己,自己通过密钥解密。

    wade
  • JS基础测试: 在原生的JS中用于异步请求网络的是下列哪个对象?​

    说到Ajax,只要有过前端开发经验的一定都不陌生,大都知道它就是一种与后端之间的通信技术,通过这个神奇的家伙,我们不用像传统表单那样填完信息一点提交就呼啦呼啦跳...

    舒克
  • 从面试题中学安全

    根据 Github 上的面经总结的一些安全岗面试的基础知识,这些基础知识不仅要牢记,而且要熟练操作,分享给大家,共勉。

    信安之路

扫码关注云+社区

领取腾讯云代金券