就 web 爬虫来说, scrapy, selenium 之类的爬虫框架和自己用 chrome 扩展做爬虫有啥区别?

238 天前
 Features
就 web 爬虫来说,scrapy ,selenium 之类的爬虫框架和自己用 chrome 扩展做爬虫有啥区别?
大家平时用哪个呢?
3434 次点击
所在节点    程序员
29 条回复
locoz
238 天前
scrapy 是通用场景下的完整解决方案,把基本的处理流程规范、数据输出、分布式部署、后续运维管理等问题都解决了。
selenium 不属于爬虫框架,用在爬虫上只是作为一个控制浏览器的工具,本质上解决的只是请求和提取数据的逻辑部分。
chrome 扩展实际与 selenium 是一样的,也只是作为一个控制浏览器的工具。

所以很显然,scrapy 和另外两个完全不是同样的东西,前者可以在通用场景下做到简单配置就实现一个完整项目,后两者则需要自己开发除请求和提取数据以外的其他部分。
locoz
238 天前
另外,chrome 扩展和 selenium 虽然都是作为控制浏览器的工具,但由于运行环境的不同,也会存在各自的优劣势场景,实际还是要根据情况使用。比如 chrome 扩展可以直接提供给非技术人员使用,简单粗暴,心智负担低,但如果涉及到写数据库之类的操作就麻烦些,而用 selenium 这种外部程序控制浏览器的方式就不会有这个问题。
NoOneNoBody
238 天前
用扩展做爬虫,这是利用别人的访问采集数据后台提交?还是说用户(别人)可控数据自用?
Features
238 天前
@NoOneNoBody 就是采集文章之类的,只在开发者模式下使用的
pengtdyd
238 天前
自己的写的是手工作坊,用框架是智能化超级工厂。
NoOneNoBody
238 天前
@Features #4
哦,都是自用

后两者都是基于浏览器渲染,不方便做大规模爬虫,如果不需要渲染,例如 html 可直接分析,还是纯 cli 效率高
需要渲染的也可用 cef ,不过 cef 在 python 支持不完整,还不怎么好用
还有一个选择是 webkit

selenium 用在爬虫我感觉有点跑偏了,可以,但这个总归主要用途是模拟浏览器控制,做自动化更合适
youngce
238 天前
爬虫本质都一样,都是发出 http 请求得到想要的数据。
但面向的需求场景不一样,比如有这样的一个需求:
请采集维基百科特定分类下的所有主题页面,大概 700W 个页面,要求一周内交付数据?
- 首先:浏览器插件已经不在考虑范围内了,使用一个浏览器翻完维基百科,你等得了用户可能等不了
- 其次:纯 selenium 处理这类弱反爬的网站也没有什么优势了,且不说无头浏览器的速度慢,如果开 1000 个无头浏览器,一般的也需要海量的内存了。
- 剩下的就是爬虫代码自行编写了,用 scrapy ,或者自己造轮子最后实现类似 scrapy 的框架的功能,对接 ip 池来进行并发爬取。(中间也可能用到 selenium 搭配处理一些反爬策略)

用哪个?看需求吧:
- 海量数据+长期需求=自己写爬虫
- 少量数据+临时需求= 数据采集器搞一下交差
Features
238 天前
@NoOneNoBody 非常感谢,长见识了
jmss
238 天前
@NoOneNoBody cef 是啥,webkit 呢,能展开说说吗,只会用 selenium 跑渲染。。
Features
238 天前
@jmss 我理解是,cef 浏览器用 chromium 订制编译的一个浏览器,
cef 项目是 cef 浏览器配合.net 环境做的一个爬虫框架
locoz
238 天前
@jmss #9 cef ( https://bitbucket.org/chromiumembedded/cef/src/master/)可以理解成是一个在 chromium 核心的浏览器引擎部分(指页面渲染引擎+一些基础功能)的基础上做了一层封装的框架,而 webkit 是苹果的浏览器引擎。

说白了就是直接拿浏览器的核心部分用,而不是运行一个完整的浏览器,以提高性能和资源利用率。
NoOneNoBody
238 天前
@jmss #9
cef, webkit 都是浏览器内核的框架(大致意思吧,没想到合适的词),前者是 chromium 系,后者就叫 webkit ,webkit 的成品有 safari, falkon 等,你可以用它们自己做一个浏览器出来,说的不是魔改开源产品,而是新造

cef 目前有不少语言支持,我搜到的较多是 C++/C#/java 等,python 包是 cefpython ,但看 github 所说还有一些功能未完全支持,这些功能在其他语言已经有了

webkit 目前我只知道 QT 支持,QT 官方例子中也有一个非常简单的浏览器的代码,Dooble 这个浏览器就是用 QT 写的
可以用 qt 相关代码做一个无 GUI 界面“浏览器”,相当于爬虫,但我还没尝试,多年没搞爬虫了,爬虫是个得罪人的事,没什么需求就不搞了,我现在最多只是小规模用脚本爬个几百页,降频慢慢完成就算了,免得惹麻烦
wangxin13g
238 天前
必须得用框架才能做爬虫算是我对 pyton 的偏见之一了..
随便搞个消息队列配合下消费者发请求或者拉个浏览器起来,任何语言都能干...不太理解非要用 python 这个语言的原因
dbow
238 天前
大部分网站都有反爬, 用初级框架爬不了, 只能用浏览器, 它们带有 js 环境验证。
Features
238 天前
@locoz
@NoOneNoBody 请教下,CEF 这种无 GUI 显示的,稳定性会好很多吗?
还有就是支持 webgl 这种渲染不?
NoOneNoBody
238 天前
@Features #15
没有认真玩过(深入研究),cef 我只是测试过可行而已,例子不多我也不知道怎么做错误处理
需要渲染的网页我只用 pyqt 自动遍历了几十个网页,拿渲染后的 html 可以提取内容而已
实际就是懒得研究页面的 js ,不熟前端,为了几十个网页研究 js 框架没有动力,扔给 webkit 让它渲染算了

github 上有些项目,有需要你可以研究一下
knightdf
238 天前
插件更稳更简单更不容易被反爬
w3cll
238 天前
怎么爬京东?
streamrx
238 天前
@wangxin13g 用 python 是因为生态, 爬虫遇到的问题都能在 github 找到相关的库 比如过 cloudflare 的指纹 只能在 python 下才找到相关的东西,你用其他的语言只有自己去重新编译 curl 这些 超级麻烦
wangyongbo
238 天前
@streamrx 你好,你知道怎么过 akamai 吗?

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

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

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

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

© 2021 V2EX