V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Features
V2EX  ›  程序员

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

  •  
  •   Features · 2023-09-17 15:58:39 +08:00 · 4033 次点击
    这是一个创建于 418 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就 web 爬虫来说,scrapy ,selenium 之类的爬虫框架和自己用 chrome 扩展做爬虫有啥区别?
    大家平时用哪个呢?
    29 条回复    2023-09-18 22:35:31 +08:00
    locoz
        1
    locoz  
       2023-09-17 16:14:43 +08:00   ❤️ 1
    scrapy 是通用场景下的完整解决方案,把基本的处理流程规范、数据输出、分布式部署、后续运维管理等问题都解决了。
    selenium 不属于爬虫框架,用在爬虫上只是作为一个控制浏览器的工具,本质上解决的只是请求和提取数据的逻辑部分。
    chrome 扩展实际与 selenium 是一样的,也只是作为一个控制浏览器的工具。

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

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

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

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

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

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

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

    github 上有些项目,有需要你可以研究一下
    knightdf
        17
    knightdf  
       2023-09-17 20:18:14 +08:00
    插件更稳更简单更不容易被反爬
    w3cll
        18
    w3cll  
       2023-09-17 20:35:55 +08:00
    怎么爬京东?
    streamrx
        19
    streamrx  
       2023-09-17 21:25:40 +08:00 via iPhone
    @wangxin13g 用 python 是因为生态, 爬虫遇到的问题都能在 github 找到相关的库 比如过 cloudflare 的指纹 只能在 python 下才找到相关的东西,你用其他的语言只有自己去重新编译 curl 这些 超级麻烦
    wangyongbo
        20
    wangyongbo  
       2023-09-17 21:37:49 +08:00
    @streamrx 你好,你知道怎么过 akamai 吗?
    streamrx
        21
    streamrx  
       2023-09-17 21:43:43 +08:00 via iPhone
    churchill
        22
    churchill  
       2023-09-17 21:49:06 +08:00
    2023 年了,忘掉 selenium 用 puppeteer 吧,
    至于离开浏览器写代码爬,恕我直言,跟反爬网站斗智斗勇的时间成本足够你雇一打刚毕业的小姑娘人工爬了
    chengxiao
        23
    chengxiao  
       2023-09-17 21:57:13 +08:00
    反爬跟框架有啥关系......
    框架纯粹就是工程管理而已 爬一个和爬十个的区别
    自己爬 1-2 个站的 无所谓你用什么都能写
    但是涉及的网站数十数百,不同网站不同规则不同频率
    以及数据入库规则等 就要用框架来管理了
    ch2
        24
    ch2  
       2023-09-17 22:36:36 +08:00
    当你技术好到能够写很牛逼的爬虫的时候,法律风险就会驱使你去找一份正经的工作,毕竟干别的也不会少拿多少钱
    cherryas
        25
    cherryas  
       2023-09-18 09:02:06 +08:00
    @churchill 你简直是我的 v 站嘴替了
    ohhal
        26
    ohhal  
       2023-09-18 11:17:20 +08:00
    @ch2 老哥说的对
    guch99999
        27
    guch99999  
       2023-09-18 14:44:42 +08:00
    @ch2 太对了
    locoz
        28
    locoz  
       2023-09-18 22:18:48 +08:00
    @Features #15 不清楚,我一般不用浏览器渲染,直接调接口较多,用浏览器渲染的时候都是量不大偷懒的情况,用哪个无所谓。
    locoz
        29
    locoz  
       2023-09-18 22:35:31 +08:00
    @ch2 #22 有一说一,我认识的一些爬虫领域高水平从业者转方向(安全、架构、AI 、搜索引擎、算法、法务、自己开公司)的,核心原因都跟法律风险没太大关系,更多的还是觉得腻了或是累了,又或者是找到了新的兴趣点的。

    而且觉得腻了和累了的这两种情况的差异还挺大,觉得腻了的是需要处理的东西基本没什么攻防对抗,大部分都可以套路化通杀,在框架早就搭好的情况下分分钟就能解决新需求或应对新改动,平时闲得都研究别的去了;觉得累了的是需要处理的东西几乎全都是各种高强度攻防对抗的,时不时就得加班研究对方又改了什么。

    会因为法律风险驱使换工作或转方向的,更多是公司就是直接卖数据、自己不怎么加工数据的情况,这种本来就极其容易被找上门。但凡是基于采集到的数据做了处理,再作为产品对内外提供正经服务的,都没多大问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2716 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:24 · PVG 22:24 · LAX 06:24 · JFK 09:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.