Scrapy是一个异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可拓展性强,可以灵活完成各种需求。我们只需要定制几个模块就可以轻松实现一个爬虫。

1.架构

 Scrapy Engine,引擎,负责整个系统的数据流处理、触发事务,是整个框架的核心。

Item,项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成Item对象。

Scheduler,调度器,接受引擎发送过来的请求,并将其加入到队列之中,在引擎再次请求时将请求提供给引擎。

Downloader,下载器,下载网页内容,并将网页内容返回给爬虫。

Sprider,爬虫,其内定义了爬取逻辑和网页的解析规则,它主要负责解析响应并生成提取结果的新的请求。

Item Pipeline,项目管道,负责处理由爬虫从网页中提取的项目,它的主要任务是清洗、验证和存储数据。

Downloader Middlewares,下载器中间件,位于引擎和下载器直接的钩子框架,主要处理引擎与下载器之间的请求和响应。

Spider Middle,爬虫中间件,位于引擎和爬虫之间的钩子框架,主要处理爬虫输入的响应和输出的结果及新请求。

2.数据流

Scrapy中的数据流由引擎控制,数据流的过程如下:

(1)scrapy engine打开一个网站,找到该网站的Sprider,并向该Sprider请求第一个需要爬取的URL。

3.创建项目

在pycharm的终端Terminal :  scrapy startproject tutorial

然后在pycharm打开该项目得到如下目录:

  • scrapy.cfg: 项目的配置文件
  • tutorial/items.py: 项目中的item文件,定义数据结构。
  • tutorial/pipelines.py: 项目中的pipelines文件,数据存储,操作数据。
  • tutorial/settings.py: 项目的设置文件。
  • tutorial/spiders/: 放置spider代码的目录。

4.创建Spider

spider是自己定义的类,Scrapy用它来抓取内容。并解析抓取的结果。不过这个类必须继承Scrapy提供的Spider类scrapy.Sprider,还要定义Spider的名称和起始请求。

命令行创建spider :  scrapy genspider quotes quotes.toscrape.com

# -*- coding: utf- -*-
import scrapy class QuotesSpider(scrapy.Spider):
name = 'quotes' #用来区分不同的Spider
allowed_domains = ['quotes.toscrape.com'] #允许爬取的域名
start_urls = ['http://quotes.toscrape.com/'] #spider启动时爬取的url列表 def parse(self, response):#负责解析返回的响应、提取数据或者进一步生成要处理的请求。
#response是爬取start_url的结果
        pass

4.创建item

item需要继承scrapy.Item类,并且定义类型为scrapy.Field的字段。假设我们需要获取的内容是name、age、 sex。

修改item.py如下:

# -*- coding: utf- -*-

# Define here the models for your scraped items
#保存和爬取数据的容器
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html import scrapy class QuoteItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
age = scrapy.Field()
sex = scrapy.Field()
pass

scrapy demo:爬取http://quotes.toscrape.com/的author、text、tags,并保存为json、csv文件。

items.py
# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#保存和爬取数据的容器
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html import scrapy class QuoteItem(scrapy.Item):
# define the fields for your item here like:
text = scrapy.Field()
author = scrapy.Field()
# tags = scrapy.Field()
pass

spirders/quotes.py

# -*- coding: utf- -*-
import scrapy
from tutorial.items import QuoteItem class QuotesSpider(scrapy.Spider):
name = 'quotes' #用来区分不同的Spider
allowed_domains = ['quotes.toscrape.com'] #允许爬取的域名
start_urls = ['http://quotes.toscrape.com/'] #spider启动时爬取的url列表 def parse(self, response): #负责解析返回的响应、提取数据或者进一步生成要处理的请求 #数据提取
quotes = response.css('.quote') #选择所有的quote
for quote in quotes:
item = QuoteItem() #.text::text 表示选择class=text的节点的正文内容
item['text'] = quote.css('.text::text').extract_first() #获取节点的内容:.text::text表示获取其内容text
item['author'] = quote.css('.author::text').extract_first()# .extract_first表示获取其正文的第一个元素
#item['tags'] = quote.css('.tags::text').extract_first()
yield item next = response.css('.pager .next a::attr("href")').extract_first() #获取下一个需要爬取的页面
url = response.urljoin(next)#urljoin()将相对url构造成一个绝对url
yield scrapy.Request(url=url,callback = self.parse) #回调函数 命令行运行: scrapy crawl quotes
执行完成后,我们可以在命令行查看运行结果,但是如何把执行结果保存为json文件或者csv文件呢?
scrapy支持多种格式输出:
scrapy crawl quotes -o quotes.json
scrapy crawl quotes -o quotes.csv
#运行成功后,项目根目录里会自动生成json和csv文件。

爬虫——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框架入门(2)

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

  6. 爬虫Scrapy框架运用----房天下二手房数据采集

    在许多电商和互联网金融的公司为了更好地服务用户,他们需要爬虫工程师对用户的行为数据进行搜集.分析和整合,为人们的行为选择提供更多的参考依据,去服务于人们的行为方式,甚至影响人们的生活方式.我们的scr ...

  7. 自己动手实现爬虫scrapy框架思路汇总

    这里先简要温习下爬虫实际操作: cd ~/Desktop/spider scrapy startproject lastspider # 创建爬虫工程 cd lastspider/ # 进入工程 sc ...

  8. 爬虫--Scrapy框架课程介绍

    Scrapy框架课程介绍: 框架的简介和基础使用 持久化存储 代理和cookie 日志等级和请求传参 CrawlSpider 基于redis的分布式爬虫 一scrapy框架的简介和基础使用 a)    ...

  9. 爬虫--Scrapy框架的基本使用

    流程框架 安装Scrapy: (1)在pycharm里直接就可以进行安装Scrapy      (2)若在conda里安装scrapy,需要进入cmd里输入指令conda install scrapy ...

  10. Python网咯爬虫 — Scrapy框架应用

    Scrapy框架       Scrapy是一个高级的爬虫框架,它不仅包括了爬虫的特征,还可以方便地将爬虫数据保存到CSV.Json等文件中.       Scrapy用途广泛,可以用于数据挖掘.监测 ...

随机推荐

  1. ubuntu 安装FoxitReader福昕阅读器(转载)

    虽然不怎么用Ubuntu来看文档,但是偶尔还是需要看一下的.而Ubuntu自带的打开PDF的软件真的看着很难受,装一个跨平台的福昕好了. 首先,下载.可以官网下载:福昕官网 不过晚上不知道网络抽风还是 ...

  2. Myeclipse2017C版本破解

    原文地址: https://blog.csdn.net/qq_33945246/article/details/79589152

  3. ueditor百度编辑器中,多图上传后,图片顺序乱掉的处理方法

    上传后,图片的顺序和预期的不一致,需要修改ueditor的源码. 一.找到editor/dialogs/attachment/attachment.js文件 1.将_this.fileList.pus ...

  4. VGG网络

    VGG论文给出了一个非常振奋人心的结论:卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用.记得在AlexNet论文中,也做了最后指出了网络深度的对最终的分类结果有很大的作用. ...

  5. nginx配置文件服务器

    server{ listen  端口号; server_name   localhost; charset utf-8; root    放文件的路径; location   /xxx/yyy/ { ...

  6. 并发控制--Concurrency control--乐观、悲观及方法

    In information technology and computer science, especially in the fields of computer programming, op ...

  7. docker-machine on azure

    1.准备Azure的虚拟机,安装docker-machine 由于azure虚拟机的管理员账号不是root,所以这里我们使用自己创建的管理员yy 1.base=https://github.com/d ...

  8. 关于reduce的理解

    什么是reduce reduce这个词字面上来讲,大多称作“归约”,但这个词太专业了,以至于第一眼看不出来意思.我更倾向于解释为“塌缩”,这样就形象多了.对一个n维的情况进行reduce,就是将执行操 ...

  9. 【转】JS中setTimeout和setInterval的最大延时值详解

    前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...

  10. Python脱产8期 Day04 2019/4/16

    流程控制 1.宏观一定是自上而下(逻辑上方代码一定比逻辑下方代码先执行):顺序结构2.遇到需要条件判断选择不同执行路线的执行方式:分支结构3.有些事情需要重复不断的去执行(当满足某种条件或不满足某种条 ...