scrapy
文章平均质量分 60
风中追风风
博客内容只做个人笔记,博客时间不代表实践时间,内容仅供参考,我1925432244,nifi大师群:492666008
展开
-
Linux 的 IO 通信 以及 Reactor 线程模型浅析
目录 随着计算机硬件性能不断提高,服务器 CPU 的核数越来越越多,为了充分利用多核 CPU 的处理能力,提升系统的处理效率和并发性能,多线程并发编程越来越显得重要。无论是 C++ 还是 Java 编写的网络框架,大多数都是基于 Reactor 模式进行设计和开发,Reactor 模式基于事件驱动,特别适合处理海量的 I/O 事件,今天我们就简单聊聊 Reactor 线程模型,主要内容分为以下几个...转载 2018-05-09 17:14:45 · 498 阅读 · 0 评论 -
从源码开始学习Scrapy系列15-view指令
前言view指令用于(内部使用fetch指令)下载指定url内容,并将response内容在浏览器上展示出来代码调试进入view模块的run方法,哦。。。。。发现没有run方法,就找他爹的run方法class Command(fetch.Command):进入fetch模块的run方法,随后转至:点击打开链接最后输出内容,将response通过webbrowser在浏览器中打开def _print...原创 2018-05-22 16:22:13 · 606 阅读 · 0 评论 -
从源码开始学习Scrapy系列14-version指令
前言version指令用于查看scrapy或包含相关依赖组件的版本信息代码调试进入version模块的run方法--version参数,输出各个依赖组件版本内容if opts.verbose: versions = scrapy_components_versions() width = max(len(n) for (n, _) in versions) patt = "...原创 2018-05-22 16:13:28 · 394 阅读 · 0 评论 -
从源码开始学习Scrapy系列13-startproject指令
前言startproject指令用于快速创建scrapy项目代码调试获取项目名,项目目录project_name = args[0]project_dir = args[0]判定当前项目目录是否存在scrapy.cfg文件if exists(join(project_dir, 'scrapy.cfg')): self.exitcode = 1 print('Error: scra...原创 2018-05-22 16:04:26 · 1118 阅读 · 1 评论 -
从源码开始学习Scrapy系列12-shell指令
前言shell指令是提供一个普通的python终端,提供了一些额外的快捷方式,其本意是用来测试提取数据的代码,用来测试XPath或CSS表达式,查看他们的工作方式及从爬取的网页中提取的数据代码调试进入shell模块的run方法url参数校验处理url = args[0] if args else Noneif url: # first argument may be a local fi...原创 2018-05-22 14:48:46 · 261 阅读 · 0 评论 -
从源码开始学习Scrapy系列02-从命令行开启项目入口
前言这篇算是真正的源码剖析开始了,你即将成为一个真正的男人哦=。=,哈哈准备工作(1)如果当前scrapy项目所处的python环境中有scrapy的包,那么需要注意的是当前项目如果也叫scrapy,那么就不必要担心会引入site-package中的scrapy,因为当前目录的自定义模块优先级要高。如果当前项目不叫scrapy,那么你就最好屏蔽掉site-package中的scrapy,避免引入它...原创 2018-05-15 11:47:43 · 671 阅读 · 1 评论 -
从源码开始学习Scrapy系列11-settings指令
前言settings指令用来获取当前爬虫指定配置项的配置信息代码调试进入settings模块的run方法获取当前爬虫进程的settings配置,这里就涉及到如果是在scrapy项目中运行,则项目的settings配置优先,有覆盖权利,否则使用系统默认的settings,这个之前说过,在此再次废话一边,因为。。。实在没啥可说得了-。-settings = self.crawler_process.s...原创 2018-05-21 18:00:24 · 274 阅读 · 0 评论 -
从源码开始学习Scrapy系列10-runspider指令
前言runspider命令用于直接通过输入文件来运行爬虫,即可不创建项目代码调试进入runspider模块的run方法输入参数校验if len(args) != 1: raise UsageError()filename = args[0]if not os.path.exists(filename): # 文件存在判定 raise UsageError("File no...原创 2018-05-21 17:26:50 · 1232 阅读 · 0 评论 -
从源码开始学习Scrapy系列09-parse指令
前言parse指令用于返回requests和items对象,可用于一个爬虫的单元测试,检验抓取结果代码调试进入parse模块的run方法初始化spidercls对象self.set_spidercls(url, opts)def set_spidercls(self, url, opts): spider_loader = self.crawler_process.spider_loade...原创 2018-05-21 16:35:21 · 598 阅读 · 2 评论 -
scrapy bug修复,解决scrapy parse指令,输入不匹配的url时候抛出异常,issues #3264
pr传送门原创 2018-05-18 18:01:45 · 836 阅读 · 1 评论 -
从源码开始学习Scrapy系列08-list指令
前言list指令是输出当前可用的爬虫名列表代码调试进入list的run方法这里看到只有两行代码for s in sorted(self.crawler_process.spider_loader.list()): print(s)深入了解self.crawler_process.spider_loader.list()大致内容是根据项目settings的SPIDER_MODULES配置项来...原创 2018-05-18 15:37:07 · 649 阅读 · 0 评论 -
从源码开始学习Scrapy系列07-genspider指令
前言genspider用于生成爬虫,与startproject不同的是,它只是生成爬虫模块文件,而startproject是生成整个scrapy项目。默认使用base模板,使用-l参数可以查看可用的所有模板Available templates: basic crawl csvfeed xmlfeed代码调试进入genspider模块的run方法获取爬虫名字,目标域名,并生成模块名name...原创 2018-05-18 15:08:25 · 1552 阅读 · 0 评论 -
从源码开始学习Scrapy系列06-fetch指令
前言fetch指令是通过scrapy下载器对给定的一个url进行抓取,并将抓取结果进行输出代码调试进入fetch模块的run方法参数校验,如果参数不是1个或者不是标准的url格式,则抛出用法错误:if len(args) != 1 or not is_url(args[0]): raise UsageError()def is_url(text): return text.part...原创 2018-05-18 11:12:29 · 1300 阅读 · 0 评论 -
从源码开始学习Scrapy系列01-源码整理/分割/文档编译
一.准备工作首先下载scrapy源代码:git clone https://github.com/scrapy/scrapy.git自此开始根据源码中的要求来配置环境,这里我们定义下载的源码根项目叫做comScrapy,然后打开comScrapy/setup.py查看:python_requires(这里要求python版本是>=2.7, !=3.0.*, !=3.1.*, !=3.2.*,...原创 2018-05-11 14:44:55 · 470 阅读 · 0 评论 -
从源码开始学习Scrapy系列05-edit指令
代码调试进入edit模块的run方法获取EDITOR配置editor = self.settings['EDITOR']配置内容其实就是一个编辑指令EDITOR = 'vi'if sys.platform == 'win32': EDITOR = '%s -m idlelib.idle'爬虫加载器根据爬虫项目名加载当前爬虫spidercls = self.crawler_process....原创 2018-05-17 18:43:26 · 316 阅读 · 0 评论 -
从源码开始学习Scrapy系列04-check指令
前言上一章我们学习了check指令以及指令的运行机制,这一章我们学习check指令,这个指令是用于执行 Spider 的Conract检查,Contract 的作用就是通过一系列的简单约定来替代单元测试代码调试打开check模块,直接定位到run方法1.获取系统基础的contracts类路径contracts = build_component_list(self.settings.getwith...原创 2018-05-17 16:58:03 · 719 阅读 · 0 评论 -
从源码开始学习Scrapy系列03-bench指令及指令运行机制
代码调试接着上一章节,在cmdline模块中的main方法中或者直接在__main__模块中的main方法中,改成如下代码:if __name__ == '__main__': execute(['scrapy','bench'])并在此方法处下断点,随后继续debug模式调试读取系统默认的default_settings配置文件,并存储到内存中读取项目的cfg文件,通过读取cfg的[se...原创 2018-05-17 11:51:58 · 888 阅读 · 0 评论 -
scrapy源码翻译解读
点击打开链接原创 2018-05-23 11:21:31 · 915 阅读 · 0 评论