Scrapy    框架架构

一.Scrapy框架是基于Twisted的异步框架,纯Python实现的爬虫框架,耦合程度低,可拓展性极强。

1.Engine引擎,处理整个系统的数据流、触发事物、框架的核心

2.item项目,定义爬虫爬取结果的数据结构,爬取的数据会被赋值成该item对象

3.Schedule调度器,接受engine发过来的request放入队列,然后engine再次请求时,将request发送给engine

4.Downloader下载器,下载网页内容,并将网页返回给spiders

5.spiders蜘蛛,定义爬取逻辑和网页解析规则,负责解析response提取结果并返回新的request

6.item Pipeline项目管道,负责处理由蜘蛛从网页中抽取项目,进行清洗,验证和存储数据

7.Downloader Middlewares下载器中间件,主要处理engine和Downloader之间的请求及响应

8.spider Middlewares 蜘蛛中间件,主要处理spiders输入的响应和输出结果及新的请求

scrapy数据流

1.engine打开网站,向这个网站的spider请求第一个要爬取的URL

2.engine通过Scheduler以request的形式调度第一个URL

3.engine向Scheduler请求下一个要爬取的URL

4.Scheduler返回下一个要爬取的URL给engine,engine将URL通过Downloader Middlewares 转发给Downloader下载

5.一旦页面下载完毕,Downloader生成该页面的Response,并将其通过Downloader Middlewares发送给Engine

6.Engine从下载器中接受Response,并将其通过Spider Middlewares发送给Spider处理

7.Spider处理Response,并返回爬取到的Item及新的Request给Engine

8.Engine将Spider返回的Item给Item Pipeline,将新的Request给Scheduler

9.重复第2到第8步,直到Scheduler中没有更多的Request,Engine关闭该网站,爬取接受

Scrapy项目认识

1.安装Scrapy通过pip安装   pip install Scrapy

2.创建Scrapy项目,直接通过scrapy命令   scrapy startproject  XXXXX 这个命令可以在任意文件夹运行,我们在一个文件夹中用scrapy startproject Tanzhou命令生成一个Tanzhou的文件夹,再进入Tanzhou文件中,用命令scrapy genspider Tanzhous  shiguangkey.com在文件夹中生成Tanzhous.py文件

3.构造请求

class TanzhousSpider(scrapy.Spider):name = 'Tanzhous'allowed_domains = ['shiguangkey.com']baseUrl = 'https://www.shiguangkey.com/course/list?page='offset=0start_urls = [baseUrl + str(offset)]

4.创建Item,在items.py文件中

import scrapyclass TanzhouItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# 课程金额money = scrapy.Field()# 课程名称title = scrapy.Field()#课程人数personNum=scrapy.Field()

5.解析响应,在Tanzhous.py类的parse()方法中直接对response进行解析,并添加到item中,再返回Item。后面使用了前面offset来构造新的request,使用callback

函数再次解析request

def parse(self, response):nodes=response.xpath('.//div[@class="course-item w192 h240 fl"]')for node in nodes:item=TanzhouItem()item['money']=node.xpath('normalize-space(.//div[@class="item-line"]/span/text())').extract_first()item['title']=node.xpath('normalize-space(.//div[@class="itemcont"]/a/text())').extract_first()item['personNum']=node.xpath('.//div[@class="item-line"]/a/text()').extract_first()yield itemif self.offset <24:self.offset += 1url = self.baseUrl + str(self.offset)yield scrapy.Request(url, callback=self.parse)

6.进入目录运行项目使用命令  scrapy crawl Tanzhous,可以运行结果,

这只是一部分内容,通过Scrapy框架可以做到边解析边爬取,直到爬取结束,停止

7.可以将命令窗口爬取到的内容保存到文件,执行下面的命令保存成json文件  scrapy crawl Tanzhous -o Tanzhous.json运行之后就可以看见json文件了

还可以通过命令输出csv、xml、pickle、marshal格式

scrapy crawl Tanzhous -o Tanzhous.csv

scrapy crawl Tanzhous -o Tanzhous.xml

scrapy crawl Tanzhous -o Tanzhous.pickle

scrapy crawl Tanzhous -o Tanzhous.marshal

8.将结果保存到MongoDB数据库要通过定义Item Pipeline实现,修改pipeline.py文件添加新类TextPipeline 实现process_item()方法,ItemPipeline是项目管道,前面生成的Item都要被送到ItemPipeline进行处理,也就是清理Html数据,验证爬虫数据,查重,再保存到数据库中

import pymongo
from scrapy.exceptions import DropItemclass TextPipeline(object):def __init__(self):self.limit=50def process_item(self, item, spider):if item['title']:if len(item['title'])>self.limit:item['title']=item['title'][0:self.limit].rstrip()+'...'return itemelse:return DropItem('Missing Text')

这是对数据的再处理以便保存到数据库。同样在pipeline.py中定义另一个Pipeline,我们实现另一个MongoPipeline如下

class MongoPipeline(object):def __init__(self, mongo_uri,mongo_db):self.mongo_uri=mongo_uriself.mongo_db=mongo_db@classmethoddef from_crawler(cls,crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DB'))def open_spider(self,spider):self.client=pymongo.MongoClient(self.mongo_uri)self.db=self.client[self.mongo_db]def process_item(self,item,spider):name=item.__class__.__name__self.db[name].insert(dict(item))return itemdef close_spider(self,spider):self.client.close()

我们还要在setting.py中配置内容

ITEM_PIPELINES={'Tanzhou.pipelines.TextPipeline':300,'Tanzhou.pipelines.MongoPipeline':400,
}
MONGO_URI='localhost'
MONGO_DB='TanzhouW'

还要启动mongodb数据库,在执行爬取运行命令 scrapy crawl Tanzhous 爬取结束后MongoDB中创建了一个数据库如下

转载于:https://www.cnblogs.com/jzxs/p/10158666.html

scrapy框架的使用相关推荐

  1. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  2. Scrapy框架中的crawlspider爬虫

    1 crawlspider是什么 在spider中要寻找下一页的url地址或者内容的url地址,想想是否有简单的方法省略寻找url的过程? 思路: 从response中提取所有的满足规则的url地址 ...

  3. Scrapy框架的概念、作用和工作流程

    1. scrapy的概念         Scrapy是一个Python编写的开源网络爬虫框架.它是一个被设计用于爬取网络数据.提取结构性数据的框架. Scrapy是一个为了爬取网站数据,提取结构性数 ...

  4. 爬虫基础分享Scrapy框架流程图与安装

    从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑.所以,我们一起 ...

  5. python 爬虫 学习笔记(一)Scrapy框架入门

    沉迷于通过高效算法及经典数据结构来优化程序的时候并不理解,为什么多线程可以优化爬虫运行速度?原来是程序特性所决定的:传统算法的程序复杂度主要来源于计算,但网络程序的计算时间可以忽略不计,网络程序所面临 ...

  6. Windows7 Scrapy框架建立

    Windows7 Scrapy框架建立 因为在Windows7中安装python 的 scrapy框架实在是太繁琐,而且在网上查找的scrapy安装过程全都是告诉你去哪里下载,所以光去找东西都找了很久 ...

  7. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 参考文章: (1)关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 (2)https://www. ...

  8. Scrapy框架的使用之Scrapy对接Selenium

    Scrapy抓取页面的方式和requests库类似,都是直接模拟HTTP请求,而Scrapy也不能抓取JavaScript动态渲染的页面.在前文中抓取JavaScript渲染的页面有两种方式.一种是分 ...

  9. python scrapy框架基如何实现多线程_【转】爬虫的一般方法、异步、并发与框架scrapy的效率比较...

    问题的由来 我们的需求为爬取红色框框内的名人(有500条记录,图片只展示了一部分)的 名字以及其介绍,关于其介绍,点击该名人的名字即可,如下图: 这就意味着我们需要爬取500个这样的页面,即500个H ...

  10. Scrapy框架基础使用

    1.流程框架 2.在命令行中输入scrapy,会有scrapy常见命令参数 在命令中输入scrapy startproject quote创建一个叫quote的项目 cd到创建好的项目目录中,然后执行 ...

最新文章

  1. XML解析方式(来自 传智播客 方立勋视频教程)
  2. ubuntu16.04上安装valgrind
  3. MFC控件的颜色设置
  4. sql where 1=1和 0=1 的作用
  5. linux python默认安装目录_非root用户在linux服务器自己目录下安装需要的python版本及其模块...
  6. [深入JUnit] 测试运行的入口
  7. 中国汽车产业数字化服务商研究报告及TOP50榜单
  8. 调用多个thrift接口ttypes冲突的问题
  9. Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
  10. MG3000系列设备IP修改内容
  11. Sketch79 mac专业矢量绘图设计
  12. Vlan的划分;配置trunk中继链路;以太通道配置;DHCP服务配置
  13. 【Poco学习笔记】Poco库介绍
  14. Ubuntu16.04 安装 indicator-sysmonitor
  15. SAP中寄售信息记录税码维护缺失的清单输出实例
  16. 上传声音 微信小程序_图文详解微信小程序中调用录音功能和音频播放的方法...
  17. ubuntu各种实用的软件
  18. css控制文本的行高
  19. GPS导航(一):分类和原理
  20. java实验2实验报告(20135232王玥)

热门文章

  1. mysql frm文件生成工具_如何使用mysqlfrm工具从.frm文件中恢复表结构
  2. 史上最全无线通信频率分配表
  3. Maya N动力学管理工具 v1.2.2 下载及教程
  4. 如何在云服务器上部署程序
  5. 无人驾驶学习(二):定位与导航
  6. Web端与移动端接入萤石云平台的视频数据
  7. 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)
  8. [MySQL远程备份策略举例]
  9. 初中计算机ps教程,初中信息技术《Photoshop 初探——基本操作》教学设计
  10. 饥荒服务器物品指令,流年饥荒控制台指令全+物品大全+服务器管理命令大全.docx...