对Scrapy框架(一)的补充

Infi-chu:

Scrapy优点:

提供了内置的 HTTP 缓存 ,以加速本地开发 。

提供了自动节流调节机制,而且具有遵守 robots.txt 的设置的能力。

可以定义爬行深度的限制,以避免爬虫进入死循环链接 。

会自动保留会话。

执行自动 HTTP 基本认证 。 不需要明确保存状态。

可以自动填写登录表单。

Scrapy 有一个 内置的中间件 , 可以自动设置请求中 的引 用( refeπer )头 。

支持通过 3xx 响应重定向 ,也可以通过 HTML 元刷新。

避免被网站使用的<noscript> meta 重定向困住,以检测没有 JS 支持的页面 。

默认使用 css 选择器或 XPath 编写解析器。

可以通过 Splash 或任何其他技术(如 Selenium ) 呈现 JavaScript 页面。

拥有强大的社区支持和丰富 的插件和扩展来扩展其功能 。

提供了通用的蜘蛛来抓取常见的格式 : 站点地图、 csv 和 XML。

内置支持以多种格式 CJSON 、 csv 、 XML、 JSON-lines )导出收集的数据并将其存储

在多个后端( FTP , S3 、本地文件系统)中。

Scrapy工作流程:

1.引擎打开一个网站( open a domain ) ,找到处理该网站的 Spider 并向该 Spider 请求第

一个要爬取的URL(s)。

2.引擎从 Spider 中 获取第一个要爬取的 URL 并在调度器( Scheduler )中以 Request

调度 。

3.引擎向调度器请求下 一个要爬取的 URL 。

4.调度器返回下一个要爬取的 URL 给引擎,引擎将 URL 通过下载中间件(请求( request)

方向)转发给下载器( Downloader )。

5.一旦页面下载完毕,下载器生成一个该页面的 Response ,并将其通过下载中间件(返回 ( Response)方向)发送给引擎。

6.引擎从下载器中 接收 Response 并通过 Spider 中间件(输入方向)发送给 Spider 处理 。

7. Spider 处理 Response 井返回爬取到的 Item 及(跟进的)新的 Request 给引擎。

8.引擎将( Spider 返回的)爬取到的 Item 给 Item Pipeline ,将( Spider 返回的) Request

给调度器。

9. (从第 2 步)重复直到调度器中没有更多的 Request,引擎关闭对该网站 的执行进程。

scrapy各组件功能:

1.引擎

引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。它也是程序的入口,可以通过 scrapy 指令方式在命令行启动,或者通编程方式实例化后调用 start 方法启动。

2.调度器

调度器从引擎接收爬取请求并将它们入队,以便之后引擎请求它们时提供给引擎。一般来说,我们并不需要直接对调度器进行编程,它是由 Scrapy 主进程进行自动控制的。

3.下载器

下载器负责处理产生最终发出的请求对象 Request 并将返回的响应生成 Response对象传递给蜘蛛。

4. Spiders

Spider 是用户编写用于分析响应结果并从中提取 Item或额外跟进的 URL 的类。每个 Spider 负责处理一个特定网站。

5.数据管道

Item Pipeline 负责处理被 Spider 提取出来的 Item。典型的处理有清理、验证及持久化。

6.下载器中间件

下载器中间件是在引擎及下载器之间的特定钩子( specific hook ),处理 Downloader传递给引擎的 Response。其提供了 一个简便的机制,通过插入自定义代码来扩展 Scrapy 的功能。

7. Spider中间件

Spider 中间件是在引擎及 Spider 之间的特定钩子( specific hook ),处理 Spider 的输入( Response )和输出(Items 及 Requests )。其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 的功能。

Scrapy基本操作:

安装

pip install scrapy

【Windows版注意事项】

环境要求:需要Microsoft Visual C++ 14.0 或以上版本

基本操作命令

# 创建爬虫项目

scrapy startproject 项目名

# 创建蜘蛛

scrapy genspider 文件名 爬取网站的域名

# 启动爬虫

scrapy crawl 文件名

数据模型Item

官方定义:爬取的主要目标就是从非结构的数据源中提取结构性数据,如网页。Scrapy提供Item类来满足这样的需求。Item对象是一种简单的容器,保存了爬取到的数据。其提供了类似于词典的API,以及用于声明可用字段的简单语法。

声明Item:Item使用简单的class定义语法和Field对象来进行声明。

Item字段(Item Fields):Field对象指明了对每个字段的元数据。

蜘蛛Spider

定义:Spider定义了爬取的动作以及分析某个网页的地方

Spider内部循环顺序:

1.以最初的URL初始化request,并设置回调函数。当该request下载完毕并返回时,生成response,并作为参数传给该回调函数。Spider中初始的request是通过调用start_requests()来获取的。此函数会读取其中的URL,并以parse为回调函数生成request。

2.在回调函数中分析返回的内容,返回Item或者一个包括二者的可迭代容器。返回的request对象之后会经过scrapy处理,下载相应的内容,并调用设置的callback函数。

3.在回调函数中,可以使用选择器或其他的解析器卡来进行页面分析,并根据分析的数据生成Item

4.由Spider返回的Item将被存放到数据库(由某些Item Pipeline处理)或者使用Feed exports保存到文件中。

管道Item Pipeline

定义:当Item在Spider中被收集之后,他将被传递到此管道中,一些组件会按照一定的顺序对Item进行处理。

作用:

1.清理HTML数据

2.验证爬取的数据(检查Item包含某些字段)

3.去重

4.将爬取结果保存到数据库中。

实质:输入/输出

分类:

1.过滤性管道

2.加工性管道

3.存储性管道

第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...

第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...

Python爬虫进阶之Scrapy框架安装配置

Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ...

NeHe OpenGL教程 第十八课:二次几何体

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用 xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 ...

第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令 Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --u ...

爬虫(十五):Scrapy框架(二) Selector、Spider、Downloader Middleware

1. Scrapy框架 1.1 Selector的用法 我们之前介绍了利用Beautiful Soup.正则表达式来提取网页数据,这确实非常方便.而Scrapy还提供了自己的数据提取方法,即Selec ...

十二 web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里 ...

十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --upgrade pip2.安装,wheel(建议网络安装) pip install wheel ...

随机推荐

浅谈Collection集合

俗话说:一个东西,一件事都离不开三句话:"是什么,为什么,怎么办" 集合是什么: 集合简单的说一个数组集合的高级体现,用来存储数据或对象的容器: 集合为什么存在: 集合只是体现了对 ...

LeetCode刷题系列

LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

sftp上传 - 待完

1.搭建本地sftp 1.1.下载msftpsrvr.exe软件 下载地址:http://www.download3k.com/Install-Core-FTP-Mini-SFTP-Server.ht ...

数学 --- 高斯消元 POJ 1830

开关问题 Problem's Link: http://poj.org/problem?id=1830 Mean: 略 analyse: 增广矩阵:con[i][j]:若操作j,i的状态改变则con[ ...

2.solr学习速成之安装

1.下载解压solr-5.3.1.tgz [root@205 opt]# tar -zxf solr-5.3.1.tgz -C /opt/module/ 2.将solr-5.3.1/server/so ...

(jQuery知识点整理-含有选择器)

第一单元                                       jQuery介绍:   javaScript ...

关于Rabbitmq的routingkey的作用

对于消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边把这些消息推到qu ...

sqlserver存储过程sp_send_dbmail邮件(html)实际应用

前段时间因工作需求,特地学习了下sp_send_dbmail的使用,发现网上的示例对我这样的菜鸟太不友好/(ㄒoㄒ)/~~,好不容易完工来和大家分享一下,不谈理论,只管实践! 如下是实际需求: -- ...

IIS Asp.Net 访问 Com组件 报拒绝访问

IIS Asp.Net 访问 Com组件 报拒绝访问 解决方法: IIS 程序池->高级设置->进程模式->标识->内置帐户=LocalSystem

python3 scrapy框架,Python3爬虫(十八) Scrapy框架(二)相关推荐

  1. 【二十八宿】又叫二十八舍或二十八星,是今人为观测日、

    [二十八宿]又叫二十八舍或二十八星,是今人为观测日.月.五星运行而划分的二十八个星区,用来解释日.月.五星运行所到的地位.每宿蕴含若干颗恒星.二十八宿的称号,自西向东排列为:东方苍龙七宿(角.亢kan ...

  2. python pipeline框架_爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 1. Spider Middleware Spider Middleware是介入到Scrapy的Spid ...

  3. 爬虫笔记八——Scrapy实战项目

    (案例一)手机App抓包爬虫 1. items.py import scrapyclass DouyuspiderItem(scrapy.Item):# 存储照片的名字 nickName = scra ...

  4. 小甲鱼Python3学习笔记之第二十八讲(仅记录学习)

    第二十八讲:文件:因为懂你,所以永恒 一.知识点: 0.file对象利用open函数来创建. 1.file文件的打开模式:f = open('文件地址','r/w/x/a等') 'r':只读模式,以只 ...

  5. scrapy微博反爬虫_基于Scrapy的微博爬虫设计

    Data Base Technique • 数据库技术 Electronic Technology & Software Engineering 电子技术与软件工程 • 187 [关键词]Sc ...

  6. 【Python】Python系列教程-- Python3 编程第一步(十八)

    文章目录 前言 打印字符串: 输出变量值: 定义变量并进行简单的数学运算 使用 for 循环打印数字 0 到 4: 根据条件输出不同的结果: end 关键字 前言 往期回顾: Python系列教程–P ...

  7. scrapy mysql 多线程,爬虫进阶之Scrapy(三) 使用scrapy某新闻网并存到数据库

    本节我们通过爬取一个新闻网站的新闻来介绍scrapy的pipeline,以及如何在pipeline中将爬取到的数据写入到数据库中. 首先是我们要爬取的内容是 https://www.chinanews ...

  8. Shell脚本学习-阶段二十八-shell练习二

    文章目录-练习2 前言 1.编写shell脚本程序,完成如下功能: 输出hello world ! 2.编写shell脚本程序,完成如下功能: 输入你的姓名,输出 hello, nice to mee ...

  9. 第三十八讲项目二 打豆豆

    1.任务和代码 /* copyright\c)2017,csdn学院 *All cights reserved *文件名称:a.c *作者:王琦 *完成日期:2017年4月23日 *版本号:6.0 * ...

最新文章

  1. 读《高效程序员的45个习惯——敏捷开发修炼之道》
  2. CentOS查看CPU信息、位数、多核信息
  3. springmvc静态资源;mvc:default-servlet-handler后Controller失效
  4. android同步服务启动,Android Service的基本用法(startService启动方式生命周期)
  5. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】
  6. c++修复工具_几款平价又好用的U盘修复工具分享
  7. UDP 无连接上机案例3.4
  8. c语言微秒级延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  9. 酒泉-嘉峪关-敦煌-西宁青海湖-兰州六日游之一
  10. 如何使用Xcode7免费真机调试
  11. distribute-list分发列表 转自 红茶三杯sina blog
  12. linux 下的rpm 和ivh各是什么意思
  13. 关于促进交通运输与旅游融合发展的若干意见
  14. 在职位招聘数据处理中使用Loess回归曲线以及分箱、回归、聚类方法 检查离群点及光滑数据【数据挖掘机器学习】
  15. C# 利用 Spire.PDF 实现.pdf转图片
  16. 设有 4道作业,它们的提交时间及执行时间如下,试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序。
  17. div框阴影外发光效果
  18. 墨画子卿第一章第3节:挑衅
  19. 【NOI2005】 月下柠檬树
  20. cpu上干硅脂怎么清理_cpu老硅脂怎么清理

热门文章

  1. Java实现 蓝桥杯 算法提高 奥运会开幕式
  2. 【PAT】乙级题目解答合集(c++)
  3. remote: Support for password authentication was removed on August 13, 2021
  4. IC卡、ID卡、M1卡、射频卡的区别是什么
  5. 第四段第一天_数学模型之层次分析法
  6. 【STM32F429】第17章 ThreadX GUIX之点阵字体和字符编码(重要)
  7. 软件环境、硬件环境、开发工具
  8. Cesium 指北针、导航罗盘、缩放按钮
  9. 改程序...茅山后裔.....软件工程......linux kernel.....kde4....
  10. mysql查询本用户的表的列名等信息_mysql常用命令查询手册