Learning Scrapy 中文版翻译 第一章

时间:2022-09-20 22:43:04

第一章:scrapy介绍

欢迎来到scrapy之旅。通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据。在这一章节,我们将给你介绍Scrapy并且告诉你能用Scrapy做哪些不可思议的事情。

你好 Scrapy:

Scrapy是一个健壮的抓取网络数据的框架。 作为一个临时的互联网使用者,你会经常发现更愿意将网站上浏览的数据保存在像EXCEL的文件中(参考章节3,基础爬虫),便于在离线或者需要计算的时候使用。作为一个开发者,你更希望将不同网站获取的数据整合起来,但是你也清楚检索和提取这些数据的复杂性。Scrapy可以帮助你完成简单和复杂数据的提取

Scrapy是基于多年健壮高效的提取海量数据的经验上开发的。通过Scrapy, 你只需要通过简单的配置就可以达到其他爬虫框架使用多个类,插件和配置才能达到的的效果。快速浏览章节7:配置和管理,你就能知道通过几行简单的配置就能在Scrapy中完成大量的工作。

从一个开发者的角度,你将会了解Scrapy基于事件的架构(我们将在章节8:Scrapy编程和章节9:管道方法中深入介绍)。它能够让我们对清洗,形成,丰富数据,存储进数据库等等操作进行串联操作。同时还可以享受非常低的性能损耗,当然必须确保是正确的方式。在这本书中,你将会完全学到如何去做到这些。从技术角度来说,由于是基于事件的,在同时有几千个连接的时候,Scrapy能够让我们摆脱由于吞吐量带来的延迟。举一个极端的例子,想象下你准备从网站上提取列表,同时这个网站有大量的页面并且每个页面都有100个列表项。Scrapy将很轻松的并行处理16个对于网站的请求,并且假设一个请求平均需要1秒完成,那么你将在1秒内爬取16个页面。乘上每个页面的列表数目,你将在1秒内生成1600个列表。假设你必须将这些列表存储在一个高并发的云存储上,存储每个列表平均需要耗时3秒,那么就意味着我们需要同时并行运行1600*3=4800个写请求(你将会从章节9:管道方法中看到很多类似的有趣的计算)。对于一个传统的多线程应用,这将需要4800个线程,这对你和你的操作系统而言都是很糟糕的体验。在Scrapy中,4800个并发的请求很平常,只要你的操作系统支持就可以了。更进一步来说,SCrapy对于内存的需求和你抓取列表的数据量非常接近,这和多线程正好相反,多线程中的每个线程相比列表的大小都增加了很多额外的开销。

简单来说,速度慢或者不可预测的网站,数据库或远程API将不会对你建立的scraper性能造成影响,因为可以同时并行的运行许多请求并且在一个线程中进行管理。和多线程应用相比,可以使用更简单的代码同时运行多个抓取器和其他应用,这将会降低费用。

更多喜欢Scrapy的理由:

Scrapy已经存在5年多的时间了,现在已经成熟稳定了。除了我们之前章节提到过的性能优势外,还有其他原因让你喜欢Scrapy:

Scrapy可以读懂破损的HTML:

你可以从Scrapy中直接使用BeautifulSoup或者LXML. 但是Scrapy提供selectors--一个相对lxml更高级的XPATH解析器。它可以有效的处理破损的HTML代码和令人费解的编码

社区:

Scrapy有一个充满活力的社区。看看在

https://groups.google.com/forum/#!forum/scrapy-users上面的邮件列表和在Stack Overflow上的数以千计的问题。大多数的答案在几分钟内得到答复。更多的社区资源请参考http://scrapy.org/community/

由社区维护的组织有序的代码:

Scrapy要求用标准的方式来组织你的代码。你编写爬虫和管道的python模块,你就可以自动使引擎的效率提高。如果你在网上搜索,就会发现有大量的人有使用Scrapy的经验。这就意味着你可以方便的找到人来维护和扩展你的代码。无论谁加入你的团队都不必经历曲线的学习来理解你的独特爬虫。

有质量的更新:

如果你看下发布文档(http://doc.scrapy.org/en/latest/news.html), 你将会注意到有不断增长的关于特性,bug的修复。

后面关于本书的目的这里就没再翻译了。

Learning Scrapy 中文版翻译 第一章的更多相关文章

  1. Learning Scrapy 中文版翻译 第二章

    为了从网页中提取信息,你有必要对网页的结构做一些了解.我们将快速学习HMTL,HTML数状结构以及用XPath在网页上提取信息 HTML, DOM树结构以及XPath 让我们花一点时间来了解当用户在浏 ...

  2. 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)

    强化学习入门最经典的数据估计就是那个大名鼎鼎的  reinforcement learning: An Introduction 了,  最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...

  3. Gradle2.0用户指南翻译——第一章. 介绍

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  4. ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)

    第一章 1.2.1小节  松耦合与ActiveMQ ActiveMQ为应用程序架构提供送耦合实现组件.松耦合经常被引入到系统架构中,来减轻紧耦合的远程工程调用的使用.松耦合的设计是异步的,来自其他系统 ...

  5. 关于learning Spark中文版翻译

      在网上找了很久中文版,感觉都是需要支付一定金币才能下载,索性自己翻译算了.因为对Spark有一定了解,而且书籍前面写道,对Spark了解可以直接从第三章阅读,就直接从第三章开始翻译了,应该没有什么 ...

  6. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之一

    一.简介 在计算机的世界里,当我们谈论并发时,我们指的是一系列的任务同时运行于一个计算机中.这里说的同时运行,在计算机拥有多于一个处理器或者是一个多核处理器的时候才是真正的同时,在计算机只拥有单核处理 ...

  7. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之六

    十一.处理线程组中的未控制异常 每种编程语言一个很重要的特性就是其所提供的用来处理程序中错误情况的机制.Java语言和其他的现代语言一样,是提供了异常机制来处理对象程序中的错误.Java提供了很多的类 ...

  8. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之五

    九.使用线程本地变量 一个并发程序的最关键特征就是共享数据.这个特性在那些继承了 Thread 类或者 实现了 Runnable 接口的对象上显得更加重要. 如果你创建一个实现了 Runnable 接 ...

  9. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之四

    七.创建和运行一个后台线程 Java中有一种特别的线程叫做 deamon(后台) 线程.这类线程具有非常低的权限,并且只有在同一个程序中没有其他的正常线程在运行时才会运行.注意:当一个程序中只剩下后台 ...

随机推荐

  1. Ubuntu杂记——Ubuntu下Eclipse搭建Maven、SVN环境

    正在实习的公司项目是使用Maven+SVN管理的,所以转到Ubuntu下也要靠自己搭环境,自己动手,丰衣足食.步骤有点简略,但还是能理解的. 一.安装JDK7 打开终端(Ctrl+Alt+T),输入  ...

  2. JavaScript---认识JavaScipt

    认识JavaScript 1.什么是JavaScript? JavaScript是属于网络的脚本语言,她被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies以及更多的应用,她更是因特 ...

  3. BZOJ 1853 幸运数字

    需要优化一波常数. 以及刚才那个版本是错的. #include<iostream> #include<cstdio> #include<cstring> #incl ...

  4. strcpy基本用法

    C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. C语言函数 原型声明:extern char *strcpy(char* dest, co ...

  5. Yii2查询语句使用不等于号

    Yii2 Active Record查询条件使用不等于号,需要使用到 operator format: [operator, operand1, operand2, ...] 运算符格式: [运算符, ...

  6. JVM初探- 内存分配、GC原理与垃圾收集器

    JVM初探- 内存分配.GC原理与垃圾收集器 标签 : JVM JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念 ...

  7. Ex 2&lowbar;22 两个有序列表合并后的第k小元素&period;&period;&period;&lowbar;第四次作业

    package org.xiu68.ch02; public class Ex2_22 { public static void main(String[] args) { // TODO Auto- ...

  8. Spring AOP 切面实现操作日志

    创建接口注解日志类 package com.fh.service.logAop; /** * Created by caozengling on 2018/7/21. */ import java.l ...

  9. 线性判别分析&lpar;Linear Discriminant Analysis&comma; LDA)算法分析

    原文来自:http://blog.csdn.net/xiazhaoqiang/article/details/6585537 LDA算法入门 一. LDA算法概述:       线性判别式分析(Lin ...

  10. linux之 LVM扩容

    1. 查看本机现在磁盘的情况[root@oralce10g ~]# df Filesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/ ...