睡前读物Scrapy
从源码看,一步一步、做大做强。
yugu2day
这个作者很懒,什么都没留下…
展开
-
Scrapy logging日志重复输出的解决方法
如果是完全在scrapy流程中的日志,一般有三种输出方式。from scrapy.log import loggerlogger.info("info")# 会抛出warning,警告scrapy.log已经被废弃,此时的logger为 scrapy.log# ScrapyDeprecationWarning: Module `scrapy.log` has been depreca...原创 2020-04-08 19:08:18 · 1784 阅读 · 6 评论 -
scrapy请求头首字母大写的解决方法
背景:同样的url, headers, payload进行post请求,requests可以正确的拿到数据,而scrapy则无法通过验证。通过抓包发现,scrapy所发出的请求头首字母均为大写,在postman中将请求头的各个key改为小写后能正确拿到请求数据。原因:scrapy的Request对象通过传入的headers字典初始化了一个scrapy.http.Headers对象,Head...原创 2020-01-09 12:01:58 · 1507 阅读 · 1 评论 -
(六)Scrapy的抓取流程——Downloader
当通过Scheduler取出一条request之后,engine就会调用_download方法进行对这条request的下载。图中downloader的fetch方法就是下载器对request的操作方法。通过DownloaderMiddlewareManager在download方法中定义了process_request, process_response, process_excepti...原创 2019-04-26 19:44:23 · 452 阅读 · 0 评论 -
(五)Scrapy的抓取流程——Scheduler
在Engine中,是通过Engine实例化的slot对象进行对scheduler对象的初始化,和任务状态的记录。# engine.py中ExecutionEngine的crawl方法def crawl(self, request, spider): assert spider in self.open_spiders, \ "Spider %r not opened w...原创 2019-04-11 20:04:33 · 2697 阅读 · 0 评论 -
(四)Scrapy的抓取流程——Engine
上一篇提到在Crawler的crawl方法中,启动了Engine。而如Scrapy流程图中描述的,抓取的流程由Engine主导完成。engine是ExecutionEngine的实例,初始化时会初始化诸如scheduler、downloader、scraper(itempipeline和spidermiddleware这一块)等属性。engine.py所在的目录,抓取流程中的主要模块。E...原创 2019-04-10 20:41:27 · 994 阅读 · 0 评论 -
(三)Scrapy的抓取流程——CrawlerProcess
上一章提到scrapy的启动是通过ScrapyCommand对象中的crawler_process实现的,crawler_process是通过crawler.py下的CrawlerProcess类创建的实例。该文件下定义了Crawler,CrawlerProcess和CrawlerRunner三个类。CrawlerProcess是CrawlerRunner的子类,而命令文件中的self.craw...原创 2019-04-09 20:25:33 · 5756 阅读 · 0 评论 -
(二)Scrapy的初始化
初始化一个scrapy项目时往往是通过startproject 和 genspider两个命令。了解scrapy进行命令输入时的逻辑是怎样实现的之后,我们可以看看commands文件夹下这两个命令是如何运行的。(1) startproject当我们新建一个项目时通过scrapy startproject <project_name> [project_dir] 命令实现。输入...原创 2019-04-03 21:07:29 · 1271 阅读 · 0 评论 -
(一)Scrapy的命令行
最近一直都是在用自己写的抓取框架做爬虫,还是系统的整理一下Scrapy相关的知识,做一个old school 的爬虫。爬虫的整个流程,就是发送网络请求,处理返回的内容两个过程。然后我们将这个流程细化;如何准备需要访问的链接,需要访问的链接应该是哪些链接;发送请求时我们带上什么,如何更快的发送更多请求;对返回的内容需要做哪些操作……不讲实例,只看实现。从Scrapy的源码来读Scrapy到底是如...原创 2019-04-02 20:12:36 · 6017 阅读 · 0 评论