seehar / maize

maize 是一个基于异步,轻量级 Python 爬虫框架
https://seehar.github.io/maize/
MIT License
5 stars 0 forks source link

仿scrapy api用法 #2

Closed ydf0509 closed 3 months ago

ydf0509 commented 8 months ago

讨厌这样写法的框架,死板

class MySpider(BaseSpider):
     def my_parse(response):
          yield item
          yield Request(url)
seehar commented 8 months ago

也可以直接在 parse 中写存储的逻辑,只是没有批量存储的能力。 另外,你觉得怎样写比较好,能否给一个思路或者demo呢?可能我用框架比较多,小爬虫直接单文件一把梭了,没有使用框架,思维可能僵化了

ydf0509 commented 8 months ago

也可以直接在 parse 中写存储的逻辑,只是没有批量存储的能力。 另外,你觉得怎样写比较好,能否给一个思路或者demo呢?可能我用框架比较多,小爬虫直接单文件一把梭了,没有使用框架,思维可能僵化了

思维稍微有点僵化了,和scrapy的 api 很相似,写法太难用太死板了,对于奇葩请求方式太不灵活了.主要是scrapy 束缚了你的思维.

你看这个爬虫代码量对比 https://funboost.readthedocs.io/zh/latest/articles/c8.html ,使用scrapy的api并不好,scrapy那是1997年开发的框架, 快30年了,太落后了

ydf0509 commented 8 months ago

此框架是自动调度一个函数,而不是自动调度一个url请求,一般框架是yield Requet(),所以不兼容用户自己手写requests urllib的请求, 如果用户对请求有特殊的定制,要么就需要手写中间件添加到框架的钩子,复杂的需要高度自定义的特殊请求在这些框架中甚至无法实现,极端不自由。

此框架由于是调度一个函数,在函数里面写 请求 解析 入库,用户想怎么写就怎么写,极端自由,使用户编码思想放荡不羁但整体上有统一的调度。 还能直接复用用户的老函数,例如之前是裸写requests爬虫,没有规划成使用框架爬虫,那么只要在函数上面加一个@boost的装饰器就可以自动调度了。

而90%一般普通爬虫框架与用户手写requests 请求解析存储,在流程逻辑上是严重互斥的,要改造成使用这种框架改造会很大。 此框架如果用于爬虫和国内那些90%仿scrapy api的爬虫框架,在思想上完全不同,会使人眼界大开,思想之奔放与被scrapy api束缚死死的那种框架比起来有云泥之别。 因为国内的框架都是仿scrapy api,必须要继承框架的Spider基类,然后重写 def parse,然后在parse里面yield Request(url,callback=annother_parse), 请求逻辑实现被 Request 类束缚得死死的,没有方便自定义的空间,一般都是要写middware拦截http请求的各个流程,写一些逻辑,那种代码极端不自由,而且怎么写middware,

ydf0509 commented 8 months ago

你思想被scrapy api写法束缚了,这是典型的scrapy写法,思想不是很开阔

class MySpider(BaseSpider):
     def my_parse(response):
          yield item
          yield Request(url)
seehar commented 8 months ago

boost_spider 的写法确实很新颖,感觉很不错,美中不足的是依赖于 funboost,而 funboost 需要安装太多的依赖,感觉很重,如果能做一个轻量级的,应该流行度更高。总而言之,您的框架让我受益匪浅,感谢您

ydf0509 commented 8 months ago

boost_spider 的写法确实很新颖,感觉很不错,美中不足的是依赖于 funboost,而 funboost 需要安装太多的依赖,感觉很重,如果能做一个轻量级的,应该流行度更高。总而言之,您的框架让我受益匪浅,感谢您

6.23 安装包时候自动安装的三方依赖包太多?

1.安装第三方包是自动的,又不需要手动一个个指令安装,安装多少三方包都没关系。
2.所有三方包加起来还不到30M,对硬盘体积无影响。
3.只要指定阿里云pip源安装,就能很快安装完,30秒以内就安装完了,又不是需要天天安装。
pip install funboost -i https://mirrors.aliyun.com/pypi/simple/

4.三方包与自己环境不一致问题?

用户完全可以自由选择任何三方包版本。例如你的 sqlalchemy pymongo等等与框架需要的版本不一致,你完全可以自由选择任何版本。
我开发时候实现了很多种中间件,没有时间长期对每一种中间件三方包的每个发布版本都做兼容测试,所以我固定死了。

用户完全可以选择自己的三方包版本,大胆点,等报错了再说,不出错怎么进步,不要怕代码报错,请大胆点升级你想用的版本。
如果是你是用你自己项目里面的requirements.txt方式自动安装三方包,我建议你在文件中第一行写上 funboost,之后再写其它包
这样就能使用你喜欢的版本覆盖funboost框架依赖的版本了。
等用的时候报错了再说。一般不会不兼容报错的请大胆点。

5.为什么要一次性安装完,而不是让用户自己用什么再安装什么?
是为了方便用户切换尝试各种中间件和各种功能时候,不需要自己再亲自一个个安装第三方包,那样手动一个个安装三方包简直是烦死了。
ydf0509 commented 8 months ago

boost_spider 的写法确实很新颖,感觉很不错,美中不足的是依赖于 funboost,而 funboost 需要安装太多的依赖,感觉很重,如果能做一个轻量级的,应该流行度更高。总而言之,您的框架让我受益匪浅,感谢您

你应该做的是函数调度框架,这样框架用途广泛,而不是仿scrapy api开发一个只能调度url请求的框架

seehar commented 8 months ago

我对依赖的使用很克制,希望尽可能的少使用第三方依赖,可以让用户更自由的选择他们相使用的依赖,不做大而全的框架。我希望做的是小巧的爬虫框架,所有不必须的依赖都可以通过选装的方式安装,并且可以手动实现替换下载器等核心模块。我将会开发一个爬虫管理平台,与 maize 配套,可视化所有的任务细节,这也是我开发 maize 的初心,因为爬虫框架市面上有一些,但是爬虫管理平台一言难尽,比较难用