前言 代码未动,配置先行.本篇文章主要讲述一下Scrapy中的配置文件settings.py的参数含义,以及如何去获取一个爬虫程序的运行性能指标. 这篇文章无聊的一匹,没有代码,都是配置化的东西,但是呢不学还不行,属于Scrapy的枢纽,很关键.所以还请各位看官老爷耐得住这一章的寂寞. settings.py 在我们创建一个Scrapy项目的时候,就会在项目下生成四个py文件,其中就有一个settings.py.其中大大小小配置也是有大几十个,这里只讲一些比较常见的,其他的还请移步官方文档. 官…
前言 Scrapy is coming!! 在写了七篇爬虫基础文章之后,终于写到心心念念的Scrapy了.Scrapy开启了爬虫2.0的时代,让爬虫以一种崭新的形式呈现在开发者面前. 在18年实习的时候开始接触Scrapy,花了一个月的时间,理论结合实践学习了Scrapy.本篇文章不写代码操作,只讲前因后果及理论,愿你懂得Scrapy. 原生爬虫面临问题 无论使用Java的Jsoup也好,python的requests也罢,开发爬虫都会面临下面几个问题: 1.分布式 爬虫程序一般只运行在一台主机…
前言 MiddleWare,顾名思义,中间件.主要处理请求(例如添加代理IP.添加请求头等)和处理响应 本篇文章主要讲述下载器中间件的概念,以及如何使用中间件和自定义中间件. MiddleWare分类 依旧是那张熟悉的架构图. 从图中看,中间件主要分为两类: Downloader MiddleWare:下载器中间件 Spider MiddleWare:Spider中间件 本篇文主要介绍下载器中间件,先看官方的定义: 下载器中间件是介于Scrapy的request/response处理的钩子框架.…
前言 "又回到最初的起点,呆呆地站在镜子前". 本来这篇是打算写Spider中间件的,但是因为这一块涉及到Item,所以这篇文章先将Item讲完,顺便再讲讲Pipeline,然后再讲Spider中间件. Item和Pipeline 依旧是先上架构图. 从架构图中可以看出,当下载器从网站获取了网页响应内容,通过引擎又返回到了Spider程序中.我们在程序中将响应内容通过css或者xpath规则进行解析,然后构造成Item对象. 而Item和响应内容在传递到引擎的过程中,会被Spider中…
前言 写一写Spider中间件吧,都凌晨了,一点都不想写,主要是也没啥用...哦不,是平时用得少.因为工作上的事情,已经拖更好久了,这次就趁着半夜写一篇. Scrapy-deltafetch插件是在Spider中间件实现的去重逻辑,开发过程中个人用的还是比较少一些的. 作用 依旧是那张熟悉的架构图,不出意外,这张图是最后一次出现在Scrapy系列文章中了. 如架构图所示,Spider中间件位于Spiders(程序)和engine之间,在Item即将拥抱Pipeline之前,对Item和Respo…
反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may sometimes require special infrastructure. Please consider…
前言 Scrapy开门篇写了一些纯理论知识,这第二篇就要直奔主题了.先来讲讲Scrapy的架构,并从零开始开发一个Scrapy爬虫程序. 本篇文章主要阐述Scrapy架构,理清开发流程,掌握基本操作. 整体架构 自己动手画架构图一张: 这就是Scrapy的整体架构,看起来流程比较复杂,但其实需要开发者参与的部分不多.这里先介绍一下各个部分. Spider:要开发的爬虫程序,用来定义网站入口,实现解析逻辑并发起请求. Pipeline:数据管道,可自定义实现数据持久化方式. Middleware:…
Spider类定义了如何爬去某个网站,包括爬取的动作以及如何从网页内容中提取结构化的数据,总的来说spider就是定义爬取的动作以及分析某个网页 工作流程分析 以初始的URL初始化Request,并设置回调函数,当该request下载完毕并返回时,将生成response,并作为参数传给回调函数. spider中初始的requesst是通过start_requests()来获取的.start_requests()获取 start_urls中的URL,并以parse以回调函数生成Request 在回…
总架构理解Middleware 通过scrapy官网最新的架构图来理解: 这个图较之前的图顺序更加清晰,从图中我们可以看出,在spiders和ENGINE提及ENGINE和DOWNLOADER之间都可以设置中间件,两者是双向的,并且是可以设置多层. 关于Downloader Middleware我在http://www.cnblogs.com/zhaof/p/7198407.html   这篇博客中已经写了详细的使用介绍. 如何实现随机更换User-Agent 这里要做的是通过自己在Downla…
这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的,并且比较适合异步的代码.对于会阻塞线程的操作包含访问文件.数据库或者Web.产生新的进程并需要处理新进程的输出(如运行shell命令).执行系统层次操作的代码(如等待系统队列),Twisted提供了允许执行上面的操作但不会阻塞代码执行的方法. Scrapy data flow(流程图)…