你懂Scrapy吗?Scrapy大型爬虫框架讲解【一】

这是Scrapy爬虫框架的第一篇,本系列专题将包含以下内容:

  1. 介绍Scrapy框架的主体以及各个组件的意义;
  2. 举实例讲解其具体应用。

开始第一节: 介绍Scrapy框架的主体以及各个组件的意义。

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

安装Scrapy需要一些依赖:

  1. Python
  2. Python Package: pip and setuptools. 现在 pip 依赖 setuptools ,如果未安装,则会自动安装setuptools 。
  3. lxml. 大多数Linux发行版自带了lxml。如果缺失,请查看 Installing lxml
  4. OpenSSL. 除了Windows(请查看 平台安装指南)之外的系统都已经提供。

当安装好这些依赖之后,只需要运行pip install Scrapy,即可安装完Scrapy。

然后运行:


  1. scrapy startproject tutorial 

即可自动创建官方标准的代码目录。


  1. tutorial/ 
  2.     scrapy.cfg 
  3.     tutorial/ 
  4.         __init__.py 
  5.         items.py 
  6.         pipelines.py 
  7.         settings.py 
  8.         spiders/ 
  9.             __init__.py 
  10.             ...  

其中:

  • tutorial/: 该项目的python总模块。
  • tutorial/items.py: 项目中的item文件,编写爬取的字段名称等;
  • tutorial/pipelines.py: 项目中的pipelines文件;
  • tutorial/settings.py: 项目的设置文件,较为重要;
  • tutorial/spiders/: 放置spider代码的主目录;

Scrapy整体架构神图:

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. (从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。

以上是老生常谈,下面谈一些经验:

  1. 如果需要大批量分布式爬取,建议采用Redis数据库存储,可安装scrapy-redis,使用redis数据库来替换scrapy原本使用的队列结构(deque),并配合其它数据库存储,例如MySQL或者MongoDB,爬取效率将会极大提高。并且其自带的dupefilter.py负责执行requst的去重,使用redis的set数据结构,通过settings文件正确设置后,即便停止scrapy爬虫,当下次重新开始后也能自动去重。原因就是在redis已经存储了request的信息。
  2. 当涉及到代理IP,Headers头中间请求信息处理的时候,可以通过中间件Middleware来实现。Spider中间件是介入到Scrapy的spider处理机制的钩子框架,可以添加代码来处理发送给 Spiders的response及spider产生的item和request。
  3. 合理设置settings文件,需要熟练掌握 settings 的各种设置。
  4. 可以重新定义def start_requests(self)函数来加载cookie信息,form信息的提交用scrapy.FormRequest以及scrapy.FormRequest.from_response这两个函数,scrapy.FormRequest.from_response能实现自动提交form数据。
  5. 采用Scrapy+phantomJS,。 downloadMiddleware 对从 scheduler 送来的 Request 对象在请求之前进行预处理,可以实现添加 headers, user_agent,还有 cookie 等功能 。但也可以通过中间件直接返回 HtmlResponse 对象,略过请求的模块,直接扔给 response 的回调函数处理。

  1. class CustomMetaMiddleware(object): 
  2.     def process_request(self,request,spider): 
  3.         dcap = dict(DesiredCapabilities.PHANTOMJS)      
  4.         dcap["phantomjs.page.settings.loadImages"] = False   
  5.         dcap["phantomjs.page.settings.resourceTimeout"] = 10 
  6.         driver = webdriver.PhantomJS("D:xx\xx",desired_capabilities=dcap) 
  7.         driver.get(request.url) 
  8.         body = driver.page_source.encode('utf8') 
  9.         url = driver.current_url 
  10.         driver.quit() 
  11.         return HtmlResponse(request.url,body=body)  

综上,是对Scrapy的各个组件一些个人的经验总结。

本文作者:蚍蜉撼大树

来源:51CTO

时间: 2024-09-28 17:03:41

你懂Scrapy吗?Scrapy大型爬虫框架讲解【一】的相关文章

【Python爬虫8】Scrapy 爬虫框架

安装Scrapy 新建项目 1定义模型 2创建爬虫 3优化设置 4测试爬虫 5使用shell命令提取数据 6提取数据保存到文件中 7中断和恢复爬虫 使用Portia编写可视化爬虫 1安装 2标注 3优化爬虫 4检查结果 使用Scrapely实现自动化提取 1.安装Scrapy 用pip命令安装Scrapy:pip install Scrapy wu_being@ubuntukylin64:~/GitHub/WebScrapingWithPython$ scrapy -h Scrapy 1.3.0

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

来源:http://www.cnblogs.com/wanghzh/p/5824181.html 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感.   Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy吸引人的地

Python爬虫框架Scrapy安装使用步骤_python

一.爬虫框架Scarpy简介Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python实现,完全开源,代码托管在Github上,可运行在Linux,Windows,Mac和BSD平台上,基于Twisted的异步网络库来处理网络通讯,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片. 二.Scrapy安装指南 我们的安装步骤假设你已经安装一下内容:<1>

Scrapy爬虫框架教程(三)-- 调试(Debugging)Spiders

前言 春节放假在老家没有网,所以最近没有更新.这周加班闲暇抽空赶紧来更新一篇.我们在写爬虫的时候经常需要修改xapth规则来获取所需的数据,而Scrapy的爬虫通常是在命令行中启动的,我们怎么去调试呢?下面我就为大家介绍两种我常用的方法. 工具和环境 语言:python 2.7 IDE: Pycharm 浏览器:Chrome 爬虫框架:Scrapy 1.2.1 正文 方法1 通过 scrapy.shell.inspect_response 函数来实现.以上一篇教程的爬虫为例: 1 2 3 4 5

Macbook环境完整安装python编程环境及Scrapy爬虫框架

第一.检查和更新python环境   默认Macbook是带有python2.7版本的,所以我们认为不够新,可以到官方网站找到MAC系统的安装包,然后进行重新安装.    代码如下 复制代码 官方下载网站:https://www.python.org/download   因为考虑到一些环境的兼容支持,所以我不打算升级到python3.4版本,还是用2.7版本.   第二.安装pip工具包   这个必须安装,是基于python的管理工具包.    代码如下 复制代码 wget https://b

Python网络爬虫1 ---- windows下搭建爬虫框架scrapy

原文出处:http://my.oschina.net/dragonblog/blog/173290 第一步:当然是安装python了,本人安装的是2.7.3版本:可以到python的官网下载然后双击运行,一路"下一步"即可完成安装.安装好后,将python的安装目录添加到系统变量中,这样才能够在控制台中输入python进入,如下图所示则说明安装python成功了 第二步:按照官网的提示,我们先安装pywin32,在http://sourceforge.net/projects/pywi

搭建海量数据采集爬虫框架教程

随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 我们来看一下作为人是怎么获取网页数据的呢? 1.打开浏览器,输入网址url访问页面内容. 2.复制页面内容的标题.作者.内容. 3.存储到文本文件或者excel. 从技术角度来说整个过程主要为 网络访问.扣取结构化数据.存储.我们看一下用java程序

社会化海量数据采集爬虫框架搭建

随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 基本的例子 我们来看一下作为人是怎么获取网页数据的呢? 1.打开浏览器,输入网址url访问页面内容. 2.复制页面内容的标题.作者.内容. 3.存储到文本文件或者excel. 从技术角度来说整个过程主要为 网络访问.扣取结构化数据.存储.我们看一下用

Python网络爬虫3 ---- ubuntu下安装爬虫框架scrapy

原文转载自:http://www.cnblogs.com/HelloPython/ 根据Scrapy安装指南(http://doc.scrapy.org/en/latest/intro/install.html) Don't use the python-scrapy package provided by Ubuntu, they are typically too old and slow to catch up with latest Scrapy. Instead, use the of