前言 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处理的钩子框架.…
前言 Scrapy开门篇写了一些纯理论知识,这第二篇就要直奔主题了.先来讲讲Scrapy的架构,并从零开始开发一个Scrapy爬虫程序. 本篇文章主要阐述Scrapy架构,理清开发流程,掌握基本操作. 整体架构 自己动手画架构图一张: 这就是Scrapy的整体架构,看起来流程比较复杂,但其实需要开发者参与的部分不多.这里先介绍一下各个部分. Spider:要开发的爬虫程序,用来定义网站入口,实现解析逻辑并发起请求. Pipeline:数据管道,可自定义实现数据持久化方式. Middleware:…
前言 代码未动,配置先行.本篇文章主要讲述一下Scrapy中的配置文件settings.py的参数含义,以及如何去获取一个爬虫程序的运行性能指标. 这篇文章无聊的一匹,没有代码,都是配置化的东西,但是呢不学还不行,属于Scrapy的枢纽,很关键.所以还请各位看官老爷耐得住这一章的寂寞. settings.py 在我们创建一个Scrapy项目的时候,就会在项目下生成四个py文件,其中就有一个settings.py.其中大大小小配置也是有大几十个,这里只讲一些比较常见的,其他的还请移步官方文档. 官…
前言 写一写Spider中间件吧,都凌晨了,一点都不想写,主要是也没啥用...哦不,是平时用得少.因为工作上的事情,已经拖更好久了,这次就趁着半夜写一篇. Scrapy-deltafetch插件是在Spider中间件实现的去重逻辑,开发过程中个人用的还是比较少一些的. 作用 依旧是那张熟悉的架构图,不出意外,这张图是最后一次出现在Scrapy系列文章中了. 如架构图所示,Spider中间件位于Spiders(程序)和engine之间,在Item即将拥抱Pipeline之前,对Item和Respo…
前言 "又回到最初的起点,呆呆地站在镜子前". 本来这篇是打算写Spider中间件的,但是因为这一块涉及到Item,所以这篇文章先将Item讲完,顺便再讲讲Pipeline,然后再讲Spider中间件. Item和Pipeline 依旧是先上架构图. 从架构图中可以看出,当下载器从网站获取了网页响应内容,通过引擎又返回到了Spider程序中.我们在程序中将响应内容通过css或者xpath规则进行解析,然后构造成Item对象. 而Item和响应内容在传递到引擎的过程中,会被Spider中…
在TensorFlow热起来之前,很多人学习python的原因是因为想写爬虫.的确,有着丰富第三方库的python很适合干这种工作. Scrapy是一个易学易用的爬虫框架,尽管因为互联网多变的复杂性仍然有很多爬虫需要自己编写大量的代码,但能够有一个相对全面均衡的基础框架,工作还是会少许多. 框架安装 不好意思用别人网站作为被爬取的例子,下面从头开始,以本站为例,开始一个简单的爬虫之旅. 因为习惯原因,本文均以python2作为工作环境. scrapy框架的安装非常简单,只要一行命令,前提是你已经…
本文目标: 下载与安装JDK 配置Java环境 1.JDK9下载:  下载地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase9-3934878.html 2.安装JDK: 打开安装包,除了下图可以取消公共JRE¹和设置路径,其他全部下一步.,完成安装 3.配置环境变量 : 计算机→属性→高级系统设置→高级→环境变量→系统变量→新建 1. 变量名:JAVA_HOME  变量值:D:\Soft…
这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名例子如下: localhost:spider zhaofan$ scrapy startproject test1 New Scrapy project 'test1', using template directory '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/scra…
关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列. 分布式架构 我将上图进行再次更改 这里重要的就是我的队列通过什么维护?这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Value形式存储,结构灵活.并且redis是内存中的数据结构存储系统,处理速度快,提供队列集合等多种存储结构,方便队列维护 如何去重?这里借助redis的集合,red…