越写越像官方文档的翻译,偏离了初衷。写一些官方文档里没有的内容吧。

 

  1. 在不限制宽带的环境下,根据页面的大小, Scrapy 一秒能爬取40-70个页面,一天在400万到600万页面。也就是说 Scrapy 应付千万级或者亿级的爬取没有问题。
  2. Scrapy 主要限制是select函数,在其他方面优化完美的情况下,大概有60%-70%的CPU花费在select上,剩下10%花费在框架本身。
  3. Scrapy 可以使用Windows下的IOCP或者Linux下的epoll机制。IOCP我试过,效果很一般,而且有很多链接出错的情况,应该是Twisted本身对Windows支持的问题。据说epoll效果要好一些,我没试过。
  4. Scrapy 支持续爬,在启动的时候指定JOBDIR即可。JOBDIR实际原理是Scrapy在启动的时候检查是否设置了变量JOBDIR,如果设置了,则读取该目录的数据进行初始化。
  5. 续爬不是非常靠谱,只有使用Ctrl+C退出才能保证下次能续爬,如果不小心多按了一次Ctrl+C,没有执行到收尾工作,有很大几率下次续爬的时候会出问题。
  6. Scrapy本身没有增量爬取的机制,这个得根据需求,自己实现。
  7. Python有一个MySQLdb库,有一个函数executemany,开始以为这个函数是内部多次执行execute,后来实际测试发现不是。在大量插入数据的情况下,many函数的执行效率比execute高很多。
  8. Scrapy本身已经带了URL去重。
  9. Scrapy不会执行class AJianSpider(BaseSpider)类的__DEL__。如果有在蜘蛛关闭的时候执行的收尾工作,可以使用扩展机制,在spider_closed中处理。
  10. Request有一个meta属性,可以用于存储和传递附加数据,实际是一个dict。
  11. 获取链接建议用正则表达式,解析整个HTML非常耗时,哪怕使用最快的lxml,依然会比Python里的正则表达式慢四倍以上。而且还有大量的不规范HTML,处理起来很麻烦。正则的问题是会匹配到script里的网址,可以简单总结一下遇到的不正常URL,过滤一下即可。
  12. 实际爬抓时,爬取国内网站会有卡住一段时间的情况,几秒到十几秒下载流量为几k,过段时间恢复正常。爬取外国网站会有ConnectionLost的情况,原因不明。我采取的是比较暴力的方式,设置重试次数为1000次。或者修改一下代码,Scrapy用的中间件处理的错误重试,可以修改retry.py的代码,在多次重试失败的情况下,把URL存储到数据库或文件中。
  13. Scrapy有一个比较坑的地方是二进制文件,Scrapy会爬取到二进制文件,Scrapy内置的二进制文件处理方式,是过滤扩展名,显然不能满足需求。Scrapy没有一个只获取URL HTTP头的功能。如果在获取URL的时候自己抓取HTTP头获取Content-Type会破坏twisted本身的机制,导致爬取异常缓慢。这里我的处理方法是写了一个中间件,发送请求的时候过滤扩展名,如果扩展名在黑名单中,再自己获取一下HTTP头。如果文件类型真的是二进制文件则放弃请求。
  14. 中间件出现异常的时候Scrapy会直接退出,不会打印堆栈,写中间件的时候可以先try住,在except主动打印异常。
  15. Scrapy自带cProfile,分析性能很管用。

浅谈 Scrapy 爬虫(二)的更多相关文章

  1. 浅谈Scrapy爬虫(一)

    以下谈论的 scrapy 基于 0.20.2 版本(当前最新版本是 0.22.0 ),python 2.7.6. 开发环境是windows 7 sp1.   互联网上比较有价值的参考资料 1. Scr ...

  2. 浅谈Kotlin(二):基本类型、基本语法、代码风格

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 通过上面的文章,在A ...

  3. 浅谈Java代理二:Cglib动态代理-MethodInterceptor

    浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...

  4. 浅谈网络爬虫爬js动态加载网页(二)

    没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...

  5. 浅谈scrapy框架安装使用

    Scrapy笔记: 一 安装: pip3 install wheel pip3 install lxml pip3 install pyopenssl pip3 install -i https:// ...

  6. crawler_浅谈网络爬虫

    题记: 1024,今天是个程序猿的节日 ,哈哈,转为正题,从事了一线网络爬虫开发有近1000天.简单阐述下个人对网络爬虫的理解. 提纲: 1:是什么 2:能做什么 3:怎么做 4:综述 1:是什么 w ...

  7. 浅谈网络爬虫爬js动态加载网页(三)

    上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将 ...

  8. 浅谈Spring(二)

    一.AOP编程(面向切面编程) AOP的本质是代理. 1.静态代理设计模式 概念:通过代理类为原始类增加额外功能. 代理类 = 原始类 + 额外功能 +实现原始类的相同接口. 优点:避免原始类因为额外 ...

  9. 浅谈网络爬虫爬js动态加载网页(一)

    由于别的项目组在做舆情的预言项目,我手头正好没有什么项目,突然心血来潮想研究一下爬虫.分析的简单原型.网上查查这方面的资料还真是多,眼睛都看花了.搜了搜对于我这种新手来说,想做一个简单的爬虫程序,所以 ...

随机推荐

  1. JavaScript 三级联动

    附件连接下载地址:http://files.cnblogs.com/files/CaktyRiven/js.zip <!DOCTYPE html> <html lang=" ...

  2. fnc.tld学习编写

    使用 el 的过程中,需要使用到后端代码处理逻辑,这个时候我们就需要自定义 方法. 如我们后端代码定义如下: package com.rhythmk.common; public class FncH ...

  3. webservice总结

    webservice xml(DTD,Schema,Stax) SOAP jax-ws (java api xml webservice) 契约优先的开发模式 CXF Rest 异构平台之间的交互(. ...

  4. Mysql5.6主从热备配置

    数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一.      实验环境 操作系统:windowsserver 2008 R ...

  5. 在 Linux 下搭建 Git 服务器

    环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows.1) ① 安装 Git Linux 做为 ...

  6. swift-重写方法和属性、禁止重写

    /*子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现.我们把这种行为叫重写. 如果要重写某个特性,你需要在重写定义的前面加上 关键字.这么做,你就表明了你是想提供一个重写 版本, ...

  7. 用3D再现2D偶像的可爱,Cygames【偶像大师 灰姑娘女孩】开发示例

          作为万代南梦宫娱乐的偶像养成游戏[偶像大师]的派生作品,是由Mobage创作的[偶像大师 灰姑娘女孩].这个游戏的最新作品,是现在累计下载突破1200万的大作,Android/iOS平台的 ...

  8. session过期时间

    在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统一定时间后,自动退出登录,销毁session. 具体设置很简单: 在主页面或者公共页面中加入:session.set ...

  9. 数据结构与算法分析C++表述第二章编程题

    把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...

  10. iOS 将一串字符里面的某个字符全部标志出来

    NSMutableString * mutStr = [NSMutableString stringWithString:@"aaabbbbaaaccc"]; NSString * ...