Python3爬虫(十八) Scrapy框架(二)

对Scrapy框架(一)的补充

Infi-chu:

http://www.cnblogs.com/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.存储性管道

原文地址:https://www.cnblogs.com/Infi-chu/p/9857264.html

时间: 2024-10-02 19:54:38

Python3爬虫(十八) Scrapy框架(二)的相关文章

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

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

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

第三百三十三节,web爬虫讲解2-Scrapy框架爬虫-Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其

python爬虫----(2. scrapy框架)

Scrapy框架,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 刚开始学习这个框架.不太好评论.只是感觉这个框架有些Java的感觉,需要太多的其他模块的支持. (一)创建 scrapy 项目 # 使用 scrapy startproject scrapy_test ├── scrapy_test │   ├── scrapy.cfg │   └── scrapy_test │

python爬虫----(5. scrapy框架,综合应用及其他)

在分析和处理选择内容时,还需注意页面的JS可能会修改DOM树结构. (一)GitHub的使用 由于之前使用Win,没使用过shell的.目前只是了解.以后再补充.找到几个不错的教程 GitHub超详细图文攻略 http://blog.csdn.net/vipzjyno1/article/details/22098621 Github修改提交 http://www.360doc.com/content/12/0602/16/2660674_215429880.shtml 以后再补充!!!!! (二

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

Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 Win7,首先,你要有Python,我用的是2.7.7版本,Python3相仿,只是一些源文件不同. 官网文档:http://doc.scrapy.org/en/latest/intro/install.html,最权威哒,下面是我的亲身体验过程. 1

爬虫学习 10.scrapy框架简介和基础应用

爬虫学习 10.scrapy框架简介和基础应用 今日概要 scrapy框架介绍 环境安装 基础使用 今日详情 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板.对于框架的学习,重点是要学习其框架的特性.各个功能的用法即可. 二.安装 Linux: ``pip3 install scrapy Windows: ``a. p

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十八课:二次几何体 二次几何体: 利用二次几何体,你可以很容易的创建球,圆盘,圆柱和圆锥. 二次曲面是一种画复合对象的方法,这种方法通常并不需要很多的三角形.我们将要使用第七课的代码.我们将要增加7个变量以及修改纹理以增加一些变化

python爬虫----(6. scrapy框架,抓取亚马逊数据)

利用xpath()分析抓取数据还是比较简单的,只是网址的跳转和递归等比较麻烦.耽误了好久,还是豆瓣好呀,URL那么的规范.唉,亚马逊URL乱七八糟的.... 可能对url理解还不够. amazon ├── amazon │   ├── __init__.py │   ├── __init__.pyc │   ├── items.py │   ├── items.pyc │   ├── msic │   │   ├── __init__.py │   │   └── pad_urls.py │  

python爬虫----(4. scrapy框架,官方文档以及例子)

官方文档: http://doc.scrapy.org/en/latest/ github例子: https://github.com/search?utf8=%E2%9C%93&q=scrapy 剩下的待会再整理...... 买饭去......       --2014年08月20日19:29:20 python爬虫----(4. scrapy框架,官方文档以及例子)

python爬虫----(3. scrapy框架,简单应用)

(1)创建scrapy项目 scrapy startproject getblog (2)编辑 items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html from scrapy.item import Item, Field class B