- 博客(20)
- 收藏
- 关注
原创 Scarpy源码分析18 总结
2021SC@SDUSC从10.01.021开始着手分析Scarpy,到现在两个多月的时间,前前后后写了17篇分析文章与技术报告。加总起来五万余字,收获颇丰。在软件工程应用这门课中,我选择的是Scarpy爬虫源码的分析,虽然之前有过爬虫小项目的代码经验,但逻辑清晰的,系统全面的分析一个现有的成熟框架,对我来说是一个困难问题。特别是因自己身体各方面原因,10月一整个月都奔波在医院与学校中,整个月中工作与学习的时间屈指可数。在这样的情况下,用极为有限的时间,系统的分析整个成熟的框架,几乎成为了不可能
2021-12-06 13:41:11
128
原创 Scarpy源码分析 17 Requests and Responses Ⅵ(终于肝完)
2021SC@SDUSC最后,作为软工应用这门课的收尾,熬夜硬肝,看完了response部分的代码。结合着官方文档进行分析:Response objects:类:scrapy.http.Response(*args,**kwargs) 源码附在最后AResponseobject represents an HTTP response, which is usually downloaded (by the Downloader) and fed to the Spiders ...
2021-12-06 13:19:40
1397
原创 Scarpy源码分析 16 Requests and Responses Ⅴ
类方法classmethodfrom_response(response[,formname=None,formid=None,formnumber=0,formdata=None,formxpath=None,formcss=None,clickdata=None,dont_click=False,...])
2021-12-06 13:06:12
427
原创 Scarpy源码分析 15 Requests and Responses Ⅳ
2021SC@SDUSCPART5:Accessing additional data in errback functions在 errback 函数中访问附加数据In case of a failure to process the request, you may be interested in accessing arguments to the callback functions so you can process further based on the arguments i.
2021-12-06 12:59:25
1055
原创 Scarpy源码分析 14 Requests and Responses Ⅲ
2021SC@SDUSCpart3:将附加数据传递给回调函数The callback of a request is a function that will be called when the response of that request is downloaded. The callback function will be called with the downloaded Response object as its first argument.请求的回调函数是在下载请求响
2021-12-06 12:44:30
614
原创 Scarpy源码分析 13 Requests and Responses Ⅱ
2021SC@SDUSC书接上回 encoding(str) – the encoding of this request (defaults to'utf-8'). This encoding will be used to percent-encode the URL and to convert the body to bytes (if given as a string). 此请求的编码(默认为 'utf-8')。此编码将用于对 URL 进行百分比编码并将正文转换为字节(..
2021-12-06 12:36:36
146
原创 Scarpy源码分析 12 Requests and Responses
2021SC@SDUSC我计划在实验的最后时间中,对Requests and Responses部分进行重点的实验探究。重点理解源码中对于Requests and Responses的操作源码。在项目文档中,有这样的定义:Scrapy uses Request and Response objects for crawling web sites.Typically, Request objects are generated in the spiders and pass across t
2021-12-06 12:19:38
1538
原创 Scarpy源码分析11 Item Pipeline Ⅱ
2021SC@SDUSC此外,pipeline还支持我们将项目写入 JSON 文件,我这里写一个简单的demo:import jsonfrom itemadapter import ItemAdapterclass JsonWriterPipeline: def open_spider(self, spider): self.file = open('items.jl', 'w') def close_spider(self, spider):
2021-12-06 12:07:00
637
原创 Scarpy源码分析10 Item Pipeline
2021SC@SDUSC之前的1-9分析部分中,我们对scrapy源码的框架进行了总览分析,在了解了基本的scrapy爬虫项目结构后,我计划结合官方文档,对于scrapy爬虫中比较突出的几个部分进行重点代码分析。首先是scrapy中Item Pipeline 的部分分析:官方文档中对于scrapy是这么定义的:Each item pipeline component (sometimes referred as just “Item Pipeline”) is a Python clas..
2021-12-06 11:57:47
613
原创 Scarpy源码分析9
2021SC@SDUSCExecutionEngine 和 Scraper 关联的地方跟了这么远,我们现在回到 ExecutionEngine 中的_next_request_from_scheduler方法,为了方便,我把这段代码再复制下放到这里来# scrapy/core/engine.pyclass ExecutionEngine(object): # ... def _next_request_from_scheduler(self, spider): ...
2021-11-17 15:55:19
779
原创 Scarpy源码分析8
2021SC@SDUSC具体_process_queue又做了什么呢class Downloader(object): # ... def _process_queue(self, spider, slot): if slot.latercall and slot.latercall.active(): return # Delay queue processing if a download_delay is con..
2021-11-17 15:52:55
67
原创 Scarpy源码分析7
2021SC@SDUSC3.4 Downloader看下 fetch 方法# scrapy/core/downloader/__init__.pyclass Downloader(object): # ... def fetch(self, request, spider): def _deactivate(response): self.active.remove(request) return res
2021-11-09 17:44:25
531
原创 Scarpy源码分析6
2021SC@SDUSC回到 engine 的open_spider方法,这个时候 slot 相关的初始化以及启动,我们应该大致能理解了。后面依次启动了 scraper 和 crawler.stats,需要注意的是 downloader 是在 engine 刚创建的时候就已经初始化好了。另外,当这些都初始化好后,engine 发出了spider_opened信号。前面我们提到过_next_request多次,我们顺着这个方法跟下去。# scrapy/core/engine.py...
2021-11-07 14:51:21
110
原创 Scarpy源码分析5
2021SC@SDUSC3.3 ExecutionEngine看下open_spider# scrapy/core/engine.pyclass ExecutionEngine(object): # ... @defer.inlineCallbacks def open_spider(self, spider, start_requests=(), close_if_idle=True): assert self.has_capacity(), .
2021-11-07 14:49:54
239
原创 Scarpy源码分析4
2021SC@SDUSC3.2 从入口开始分析简单的认识了主要的几个类之后,我们来跟下代码。运行爬虫时,很多时候我们会这么执行$ scrapy crawl <spider_name>看下这个 scrapy 可执行文件#!/Users/kevinbai/.pyenv/versions/3.7.5/envs/site_analysis/bin/python3.7# -*- coding: utf-8 -*-import reimport sysfrom scr
2021-10-30 09:26:13
287
原创 Scarpy源码分析3
2021SC@SDUSC2 框架有哪些功能要知道一个框架有些什么功能,可以看它的官方文档。Scrapy 的主要部件有 Engine、Spider、Scheduler、Downloader、Item Pipelines 以及中间件。更详细的功能,我们就可以通过主要部件去联想。比如:Spider 涉及 Request、Response、Selector、ExtractorScheduler 涉及去重的 DupeFilterDownloader 涉及并发量、下载延时等设置Item Pipe
2021-10-25 16:57:20
87
原创 Scarpy源码分析2
2021SC@SDUSCDeferredList当碰到需要等待多个 deferred 执行完毕的时候,我们可以使用 DeferredListdl = defer.DeferredList([deferred1, deferred2, deferred3])看个例子from twisted.internet import deferdef print_result(result): for (success, value) in result: if success...
2021-10-25 16:37:22
175
原创 2021-10-05Scarpy 源码分析1
2021SC@SDUSC1 TwistedScrapy 基于 Twisted,所以除了要有一定的 Python 基础外,还要对 Twisted 有一些了解。我们可以将 Twisted 和 Asyncio 类比,它们都是为了支持协程而诞生的,只是前者比后者出现的更早。这 2 个技术实现的核心都是事件循环,当程序执行到某个耗时的 IO 操作时,程序的执行权限会被退回给事件循环,事件循环会检测其它准备就绪的协程,然后将执行权限交给它,当之前的协程 IO 操作完毕后,事件循环会将执行权限转给它,继
2021-10-05 16:26:37
172
原创 爬虫安装的3个问题与解决方案
2021SC@SDUSCprofessor给的任务:选课同学每人每周要发布一篇技术博客,那么我就爬取同学们发布的博客。计划采取的是java的gecco爬虫框架开发,但考虑到java语言对于爬虫的支持不如python的全面,以及在数据分析层面上python语言的充分支持,还是考虑采用python的scarpy爬虫对数据进行抓取。安装scrapy时,(windows系统,python3.9)采用pip install scarpy 命令报错1:10061由于目标计算机积极拒绝,无法连接大
2021-09-30 10:59:56
1168
原创 gecco爬虫初见与综述
2021SC@SDUSCGecco是一款用java语言开发的轻量化的易用的网络爬虫。作为国内大佬研发的java网络爬虫,Gecco整合了jsoup、httpclient、fastjson、spring、htmlunit、redission等优秀框架,我们使用者只需要配置一些jquery风格的选择器就能很快的写出一个爬虫。同时这个Gecco框架有优秀的可扩展性,框架基于开闭原则进行设计,对修改关闭、对扩展开放。以上是gecco爬虫官网的介绍,作为一个java爬虫,它简单易用,使用jquery风
2021-09-29 13:30:49
393
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人