请问使用 scrapy 的优势是什么?直接用 requests 不是很简单?

2016-09-18 11:08:27 +08:00
 hippoboy

从接触爬虫开始就一直使用 requests,每每和身边人说起来,得到的回答都是 requests 更好用,没必要使用 scrapy

但是看了好多公司的招聘,上面还是有要求使用 scrapy,我觉得这个 scrapy 肯定有它的过人之处?

求教各位朋友,能否让我豁然开朗一下?

23088 次点击
所在节点    Python
58 条回复
leavic
2016-09-18 11:12:01 +08:00
你身边的人都是菜鸟, requests 是 polling 方式的,会被网络阻塞,你用 requests 去爬个 10 万个 item 的项目试试看。
chy373180
2016-09-18 11:18:55 +08:00
scapy 底层是异步框架 twisted ,并发是最大优势
9hills
2016-09-18 11:26:04 +08:00
requests 和 scrapy 就是两个不同的东西,没有可比性

scrapy 也能用 requests 去抓页面
requests 也有异步版本
prefere
2016-09-18 11:27:12 +08:00
还是要看应用场景吧,后者可以让你少写些代码。
prefere
2016-09-18 11:28:07 +08:00
更正:后者 改为 Scrapy 。
menc
2016-09-18 11:30:00 +08:00
requests 是一个 lib ,
Scrapy 是一个框架。

你要 log ,你要并发,你要存储,你要监控,后者都能做,前者不能做,要自己写代码。
whwq2012
2016-09-18 12:15:51 +08:00
我也觉得要看应用场景,比如你爬 bilibili 的视频播放量,那么只用 requests 要快得多,毕竟 b 站视频网址都是 avxxxxxx 。再比如你要爬百度贴吧所有吧的所有帖子,那么用 scrapy 就很有优势了,因为 scrapy 就是为了这类场景而生的。它可以设置 rule ,爬取指定规则的网址,还可以根据规则过滤不需要的,最重要的是这货还会自动翻页!在这种情况下如果要用 requests ,代码不知道要复杂多少倍啊!!
tscat
2016-09-18 12:18:22 +08:00
想看 Demo ,可以去伯乐在线 Python 看看,挺多的。我不是广告不是广告
kohnv
2016-09-18 12:24:01 +08:00
scrapy 是异步的, 吞吐量很高. requests 爬完一个再爬一个, 一分钟爬不了几个页面. 当然你也可以自己用异步的方式去使用 requests, 那就是自己写了一个类似 scrapy 的东西了, 代码量和简单的使用 requests 就不是一个量级了.
ooh
2016-09-18 12:24:47 +08:00
很简单 Scrapy 有很多个轮子, requests 不过就是一个加强版的 urllib 只有一个轮子,多线程都要自己去实现,不麻烦吗?就好像同样要爬取一个网站, Scrapy 是一整套最佳实践的合集, requests 却只能进行网络请求,其它部分代码还要自己去思考怎么组织。
mrytsr
2016-09-18 12:33:17 +08:00
gouchaoer
2016-09-18 12:57:49 +08:00
@leavic 你才是菜鸟。。。。用框架基本没法扩展, scrapy 的中间件写起来很爽?你斗 m 么?

一般完成特定任务都需要定制很多爬虫特性,恕我直言, scrapy 和别的很多框架适合小白跑个简单任务
leavic
2016-09-18 13:02:18 +08:00
@gouchaoer 我第一次看到有人说 scrapy 不能扩展, pipeline 可以随意处理数据, middleware 可以随意处理网络层,我不知道你还要扩展啥。等你用 requests 扩展了一堆东西觉得实现了一个很伟大的工程时,才发现这 tm 只是 scrapy 的基本功能。
shyling
2016-09-18 13:08:43 +08:00
区别就是框架和库的差别。不是有东西谁能做谁不能做,而是如果有现成的解决方案要不要去用,是否满足需求,不满足的话扩展能力如何。
就像很多 java 黑会说 python 里 helloworld 只要一句, java 里要 class 要 static method balabala...因为需求就是显示个 helloworld 而已,其他东西是我不 care 的。
gouchaoer
2016-09-18 13:12:15 +08:00
爬虫本质是开一个 httpclient 取回 html 然后 dom 去抽数据这么一个简单的东西, py 的 httpclient 比较好用的就 requests , dom 就 bs4 嘛。。。问题是不用框架你需要自己写并发+监控(这块很简单,我推荐多进程同步方案,别用 twisted 因为 debug 复杂编码难,同步的完全够用;监控推荐 redis 来做),这一块 scrapy 封装好了所以小白就用 scrapy 了。。。。于是公司就觉得 scrapy 好。。。

你要接入打码平台啊,灵活做代理 ip 方案啊,接入 phantomjs 啊,做缓存控制啊,多节点基于 redis 的并发处理啊。。。。这些你用 scrapy 都很难定制,因为它封装太厉害了。。。。简单的说, lz 你懂得思考,不像小白只知道用框架
gouchaoer
2016-09-18 13:14:29 +08:00
@leavic 看个人需求吧,你觉得 scrapy 能完成你的任务那就用呗
hippoboy
2016-09-18 13:49:50 +08:00
@gouchaoer 确实用 requests 自己实现了好多东西之后反而 scrapy 更加简单的手到擒来....有感觉自己写的代码可能在变人眼里只是一坨....所以也想学学口口相传的 scrapy,可能代码量会少很多,更注重主要逻辑....反正慢慢学喽,感谢赐教.
hippoboy
2016-09-18 13:52:41 +08:00
@leavic 感同身受,自己写了很多东西之后把 requests 丰满之后,把代码给别人,就好像是把自己的"框架"(比较 low 的框架)给别人一样,可能有代码规范等一系列问题,再看看 scrapy 好简洁,这也应该是我想学习 scrapy 的主要目的吧,感谢赐教.
est
2016-09-18 14:03:35 +08:00
@gouchaoer 顶 支持。

用 scrapy 的不仅是菜鸟,还是笨鸟。

gevent + requests 秒杀你们 twisted 一个银河系没问题。上行带宽可以打满。服务器带宽也可以打满
est
2016-09-18 14:06:55 +08:00
scrapy 做分布式方案只有麻烦的份。

scrapy 根本就是用来爬静态单站的。跟上个世纪的 Flashget 的批量下载、 httrack 之流没啥区别。提供一大堆没什么卵用的框架功能。根本没法应付跨站泛爬的情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/306922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX