Scrapy框架

      Scrapy是一个高级的爬虫框架,它不仅包括了爬虫的特征,还可以方便地将爬虫数据保存到CSV、Json等文件中。
      Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
      Scrapy 使用了 Twisted异步网络库来处理网络通讯。
      整体架构大致如下:

Scrapy主要包括了以下组件:
  • 引擎(Scrapy)
    用来处理整个系统的数据流, 触发事务(框架核心)
  • 调度器(Scheduler)
    用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader)
    用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  • 爬虫(Spiders)
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
  • 下载器中间件(Downloader Middlewares)
    位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
  • 爬虫中间件(Spider Middlewares)
    介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
  • 调度中间件(Scheduler Middewares)
    介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy运行流程

Scrapy运行流程大概如下:

1)引擎从调度器中取出一个链接(URL)用于接下来的抓取;

2)引擎把URL封装成一个请求(Request)传给下载器;

3)下载器把资源下载下来,并封装成应答包(Response);

4)爬虫解析Response;

5)解析出实体(Item),则交给实体管道进行进一步的处理;

6)解析出的是链接(URL),则把URL交给调度器等待抓取。

Scrapy的安装

首先在cmd命令行中安装Scrapy

pip install scrapy

在Windows安装是可能会出现错误,提示找不到Microsoft Visual C++,需要安装Twisted 。

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
  在下载Twisted之前,先要确认你Python的版本,比如我的版本为Python3.6.5,就选择cp36的;电脑
  系统是64位,就选择win amd64的。

Twisted的安装:

pip install E:\Downloads\Twisted-18.4.0-cp36-cp36m-win_amd64.whl

最后再安装Scrapy。

Scrapy常用命令

Scarpy常用命令
命令 说明 格式
startproject 创建一个新工程 Scrapy startproject 项目名
genspider 创建一个爬虫 Scrapy genspider 项目名 域名
settings 获取爬虫配置信息 Scrapy settings 
crawl 运行一个爬虫 Scrapy crawl 项目名
list 列出工程所有爬虫 Scrapy list
shell 启动URL调试命令行 Scrapy shell [url]
edit 编辑爬虫文件 Scrapy edit 文件名

注意:一般创建爬虫文件时,以网站域名命名

项目创建

项目创建步骤:

       步骤1:建立一个Scrapy爬虫工程
             选取一个目录(E:\PyCodes\),然后执行如下命令:
E:\PyCodes\scrapy startproject myproject
      步骤2:在工程中产生一个Scrapy爬虫
             进入工程目录(E:\PyCodes\myproject),然后执行如下命令:
E:\PyCodes\myproject\scrapy genspider mydome mydome.com

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

            (1)初始URL地址
            (2)获取页面后的解析方式
# -*- coding:utf-8 -*-
import scrapy class MydemoSpider(scrapy.Spider):
name = "mydemo"
allowd_domains = ["http://mydome.com"]
start_url = ['http://python123.io/ws/dome.html'] def parse(self, response):
pass
      步骤4:运行爬虫,获取网页
             mydemo爬虫被执行,捕获页面存储在mydemo.html
             在命令行下,执行如下命令:
E:\PyCodes\myproject\scrapy crawl mydome

生成的项目结构:

myproject/                 -------外层目录
scrapy.cfg -------项目的配置文件
myproject/ -------该项目的python模块。之后您将在此加入代码。
__init__.py -------初始化脚本
items.py -------item代码模块(继承类)
middlewares.py -------Middlewares代码模板(继承类)
pipelines.py -------Pipelines代码模板(继承类)
settings.py -------Scrapy爬虫的配置文件 spiders/ -------Spiders代码模板目录(继承类)
__init__.py -------初始文件,无需修改
__init__.py -------缓存目录,无需修改

Python网咯爬虫 — Scrapy框架应用的更多相关文章

  1. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  2. 爬虫scrapy框架之CrawlSpider

    爬虫scrapy框架之CrawlSpider   引入 提问:如果想要通过爬虫程序去爬取全站数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模 ...

  3. 安装爬虫 scrapy 框架前提条件

    安装爬虫 scrapy 框架前提条件 (不然 会 报错) pip install pypiwin32

  4. 爬虫Ⅱ:scrapy框架

    爬虫Ⅱ:scrapy框架 step5: Scrapy框架初识 Scrapy框架的使用 pySpider 什么是框架: 就是一个具有很强通用性且集成了很多功能的项目模板(可以被应用在各种需求中) scr ...

  5. Python爬虫 ---scrapy框架初探及实战

    目录 Scrapy框架安装 操作环境介绍 安装scrapy框架(linux系统下) 检测安装是否成功 Scrapy框架爬取原理 Scrapy框架的主体结构分为五个部分: 它还有两个可以自定义下载功能的 ...

  6. python爬虫scrapy框架

    Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...

  7. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  8. Python爬虫Scrapy框架入门(1)

    也许是很少接触python的原因,我觉得是Scrapy框架和以往Java框架很不一样:它真的是个框架. 从表层来看,与Java框架引入jar包.配置xml或.property文件不同,Scrapy的模 ...

  9. python学习之-用scrapy框架来创建爬虫(spider)

    scrapy简单说明 scrapy 为一个框架 框架和第三方库的区别: 库可以直接拿来就用, 框架是用来运行,自动帮助开发人员做很多的事,我们只需要填写逻辑就好 命令: 创建一个 项目 : cd 到需 ...

随机推荐

  1. java 编码乱码问题

    Tomcat的server.xml 文件Connector标签加上URIEncoding="utf-8": <Connector port=" protocol=& ...

  2. 关于c# .net爬虫

    刚开始听到爬虫这两个字眼的时候感觉挺稀奇的,之前并没有接触过爬虫,正好这会手上没事,于是便百度了一下. 1.网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种 ...

  3. 【07】Ajax status和statusText状态对照表

    Ajax status和statusText状态对照表   XMLHttpRequest 对象的 status 和 statusText 属性保存有服务器返回的 http 状态码,不同的是,statu ...

  4. Java反射机制(Reflect)解析-----https://www.cnblogs.com/fzz9/p/7738381.html

    Java反射机制(Reflect)解析-----https://www.cnblogs.com/fzz9/p/7738381.html

  5. zoj 2676 二分+ISAP模板求实型参数的最小割(0-1分数规划问题)(可做ISAP模板)

    /* 参考博文:http://www.cnblogs.com/ylfdrib/archive/2010/09/01/1814478.html 以下题解为转载代码自己写的: zoj2676 胡伯涛论文& ...

  6. SpringBoot Data JPA 关联表查询的方法

    SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店 ...

  7. 使用Spring-Session共享使用Session

    前言: session共享策略有很多,常见的有粘性复制,高并发下效率查.tomcat-redis-session-manager无疑是一个挺好的方案,缺点要配置tomcat,有点复杂.最优的方案莫过于 ...

  8. 【BZOJ4474】isomorphism(树的同构,哈希)

    题意:一个无向树的度数为 2的结点称为假结点,其它结点称为真结点.一个无向树的简化树其结点由原树的全体真结点组成,两个真结点之间有边当且仅当它们在原树中有边,或者在原树中有一条联结这两个结点的路,其中 ...

  9. HDU——1285 确定比赛名次

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. MySQL查询去重语句

    1.distinct select count(distinct CName) from Course select count(CName) from (select distinct CName ...