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

大家爬虫一般都用什么框架?有什么教程推荐吗?

  •  1
     
  •   whooami · 167 天前 · 5822 次点击
    这是一个创建于 167 天前的主题,其中的信息可能已经有所发展或是发生改变。
    58 条回复    2023-10-28 13:07:00 +08:00
    PTLin
        1
    PTLin  
       167 天前   ❤️ 1
    我感觉主要就两种,一种单解析 html 的库,一种 WebDriver 的库,你对着你的语言看着选就行
    LoNeFong
        2
    LoNeFong  
       167 天前   ❤️ 1
    scrapy
    yekern
        3
    yekern  
       167 天前
    python: scrapy
    go: gocolly/colly
    centralpark
        4
    centralpark  
       167 天前
    不推荐用包括 scrapy 在内的任何框架。参见: https://www.zhihu.com/question/293589348
    vdrapb
        5
    vdrapb  
       167 天前   ❤️ 1
    java jsoup
    yvescheung
        6
    yvescheung  
       167 天前
    xiangyuecn
        7
    xiangyuecn  
       167 天前   ❤️ 3
    手撸,日常简单使用:浏览器控制台 + 内置 XMLHttpRequest😂 日常爬攒劲小视频 m3u8 里面的 ts 文件🐶
    monsterx2a
        8
    monsterx2a  
       167 天前
    @centralpark 简单看了下里面内容, 不推荐的原因有:
    monsterx2a
        9
    monsterx2a  
       167 天前   ❤️ 1
    1. 太重了, 杀鸡用不了牛刀
    2. 对初学者不友好, 其实跟着文档,开箱即用了
    3. 太快了,scrapy 不是可以通过配置来改变规则的吗?
    4. 封装过度,细节不易控制。scrapy 里面的日志很详细的, 并且 python 里面是动态类型,增加猴子补丁的方法很方便。


    这是我对你这个问题的几个疑问。 不知道是不是我没有理解里面的意思。

    我一直都用 scrapy 来做爬虫的
    monsterx2a
        10
    monsterx2a  
       167 天前
    并且上面提到爬虫重点是策略, 可是 scrapy 都具有的, 可以通过 headless 来控制, 甚至输入验证码等
    libook
        11
    libook  
       167 天前   ❤️ 1
    熟悉前端开发的话,可以用 Puppeteer ,因为核心思路就是用脚本自动控制 Chrome 浏览器,所以不会有兼容性问题,爬虫检测也很容易绕开。我基本都是用这个来做爬虫。
    zhangkunkyle
        12
    zhangkunkyle  
       167 天前
    根据我的经验,大规模分布式爬虫,都是不用框架自己设计,因为涉及到 html 、json 、app 等类型的解析,列表页详情页的处理,反爬处理,文件下载,简单清洗,代理使用等等,一般都是把每个功能都拆分开,使用消息队列或者接口等方式来沟通,还要和业务结合。没有推荐的教程,如果基本的包都会用,那就是架构设计问题了
    AndyChina
        13
    AndyChina  
       167 天前   ❤️ 4
    如果需要批量写爬虫, 直接使用 scrapy, 迭代这么多年的开源项目, 帮你处理并发/重试/cookie/任务调度/指标统计等一系列问题, 有啥不满意的, 别听他们什么薄封装, 厚封装, 根本就是懒得翻文档, 只好重复写轮子罢了

    框架的意义就在于帮你模块化处理各种事情, 用户只需要关注处理具体的 http 请求, 当在使用中逐渐熟悉 scrapy, 就会了解设计的精妙之处, 如果不满意之处, 也可以自由添加自己的功能

    当然, 如果你只是想临时写一个小的爬虫, 并且不熟悉 scrapy, 那直接用 requests 就很合适

    如果追求极致底层, 那应该用 urllib😊
    ccraohng
        14
    ccraohng  
       167 天前   ❤️ 1
    https://github.com/xiyuan-fengyu/ppspider

    nodejs 这个好用
    cheerio + puppeteer
    streamrx
        15
    streamrx  
       167 天前 via iPhone
    框架根本就不重要, 爬虫唯一难的就是逆向 js,逆向 app 只有逆向是爬虫的核心 其他的步骤是个人都能写出来
    LitterGopher
        16
    LitterGopher  
       167 天前
    就是 requests + beautifulsoup ,没有框架(大概是我写的内容都比较简单的原因吧)。
    whooami
        17
    whooami  
    OP
       167 天前
    感谢各位推荐及建议,只是感觉重新造轮子时间成本有点高
    whooami
        18
    whooami  
    OP
       167 天前
    @yvescheung
    @libook
    两位推荐的如果部署在服务器上,没有浏览器是不是就用不了了?
    coderluan
        19
    coderluan  
       167 天前
    scrapy ,但是不建工程,只写单文件脚本,有时候怕出事就用油猴脚本前端爬。
    patz
        20
    patz  
       167 天前   ❤️ 1
    教程强烈推荐崔庆才老师的 [Python 3 网络爬虫实战] ,外国关于爬虫的教程和书籍很零碎,就是看了这书学到了全面的爬虫技术! https://python3webspider.cuiqingcai.com/
    yvescheung
        21
    yvescheung  
       167 天前   ❤️ 1
    @whooami 不会,playwright 用的是自己的浏览器驱动
    Masterlxj
        22
    Masterlxj  
       167 天前
    不用框架,纯手撸
    damila
        23
    damila  
       167 天前
    纯用 node 爬,其实已经基本满足需求了。另外 puppeteer 真的是神器,可以爬很多原来爬不了的东西。
    liylcn
        24
    liylcn  
       167 天前
    @xiangyuecn 好兄弟,借一步说话
    enchilada2020
        25
    enchilada2020  
       167 天前 via Android   ❤️ 1
    一个疑问 解析 HTML 之类的 JS 岂不是比 Python 更如鱼得水 原生 Web API 拿来就用 为啥都喜欢用 Python 来写爬虫?
    lambdaq
        26
    lambdaq  
       167 天前
    手搓
    wjx0912
        27
    wjx0912  
       167 天前
    Puppeteer +1
    wjup
        28
    wjup  
       167 天前
    requests + beautifulsoup 纯手撸,没写过复杂的爬虫。也就爬取点自己感兴趣的玩玩
    tingyunsay
        29
    tingyunsay  
       167 天前
    当年我一个人用 pyspider 自己改写了下接到公司平台,维护了两百多个爬虫脚本,不过原作大佬已经不维护了,但是应该还能用
    jackOff
        30
    jackOff  
       167 天前
    我爬虫一直都是手撸,因为这样子门清,知道大概频率和强度,和楼上那位提议不使用爬虫框架类似的心态,我主要是怕触发铁窗泪成就,大多数情况下就是 requests 加正则去匹配数据,稍微难搞就用 beautifulsoup 。偶尔需要一点点效率就用一次异步。再复杂的脚手架就没玩过了
    pzj4437
        31
    pzj4437  
       167 天前
    @xiangyuecn
    @liylcn
    都是兄弟 一起走一部
    777777
        32
    777777  
       167 天前
    为什么都不考虑 go 写
    dcsuibian
        33
    dcsuibian  
       167 天前
    @enchilada2020 我就是都用 js 写的,确实更加如鱼得水。尤其是学到的前端知识可以高度复用,而且对于 puppeteer 这种无头浏览器来说,js 还是一等公民
    aosan926
        34
    aosan926  
       167 天前
    Java ,简单的直接 Http 请求,复杂的用的 selenium
    danbai
        35
    danbai  
       167 天前
    Belmode
        36
    Belmode  
       167 天前
    Java webmagic
    justin2018
        37
    justin2018  
       167 天前
    Crawlee · Build reliable crawlers. Fast. | Crawlee

    https://crawlee.dev/
    eluotao
        38
    eluotao  
       167 天前
    如果是业务需求,可以接触 python 的 scrapy ,虽然很多人都不推荐,但这适合大多数入门的人,这个框架可是帮我拿下一套房的大功臣。

    针对业务:能用 and 稳定就足够,性能不够多开就好。

    针对个人兴趣:也建议走一遍 scrapy 的流程,慢慢就会把一些核心的或者功能没那么复杂的爬虫任务,单独拆分自己编写,再配合 cron 和 青龙面板 就能解决了

    任何技术最终都是要变现,能变现就是好技术。不一定要选择最优的方法,最牛的技术。
    whooami
        39
    whooami  
    OP
       167 天前
    @yvescheung 嗯嗯,看到文档了
    whooami
        40
    whooami  
    OP
       167 天前
    看出来了,都是高手啊,感谢各位的建议。还有很多手写的,厉害厉害
    whooami
        41
    whooami  
    OP
       167 天前
    @eluotao 很牛啊,如果可以的话,很想听听你一套房的故事。
    shanghai1998
        42
    shanghai1998  
       167 天前
    八爪鱼,真好用
    alinwu05
        43
    alinwu05  
       167 天前 via iPhone
    用 PHP 做,选一个浏览器的库,前后端界面一把梭
    HankLu
        44
    HankLu  
       167 天前
    写爬虫,救不了中国
    wellerman
        45
    wellerman  
       167 天前
    PHP 加个 DOM 库,很快。
    daqin
        46
    daqin  
       167 天前
    @alinwu05 啥浏览器库?
    llsquaer
        47
    llsquaer  
       167 天前
    requests 足够 不用去学其他框架了..大概率根本用不上... 需要模拟的话 playwright 够用了
    yrj
        48
    yrj  
       167 天前
    pyspider ,作者也在这个社区。不过好久没更新了。
    wocao666
        49
    wocao666  
       167 天前
    scrapy+playwright
    wocao666
        50
    wocao666  
       167 天前
    千万不要用 splash ,本人已经踩过坑
    bigha
        51
    bigha  
       166 天前
    requests 爬遍天下,遇到反扒的就加上 nodejs 一起

    不过个人喜欢把 js 的算法用 python 重新实现一边
    alinwu05
        52
    alinwu05  
       166 天前
    @daqin 浏览器无非是 HTTP 请求组成的,所以用 Guzzle 库就可以了 , DOM 库我用 DiDOM, 支持 XPATH 和 CSS 选择器。
    whooami
        53
    whooami  
    OP
       166 天前
    手工汇总排名:3 票以上
    1 、自己手工写的(包括 requests/XMLHttpRequest 之类的)(各各身怀绝技,都是大牛)
    2 、scrapy ( 14+)
    3 、Puppeteer ( 6+)
    4 、playwright (4+)
    blankmiss
        54
    blankmiss  
       166 天前
    爬虫 最难的不就是风控 和 逆向吗 其他有什么区别吗
    libook
        55
    libook  
       166 天前   ❤️ 1
    @whooami #18 Puppeteer 有无头模式,我就是自己开发爬虫,然后打成 Docker 镜像扔服务器上跑的,遇到没法无头调试的 bug 才会在本地关闭无头模式看一看页面到底变成啥样了。
    whooami
        56
    whooami  
    OP
       166 天前
    @blankmiss 所以就想看看有没有什么框架可以在这方面为小白处理掉一部分问题
    @libook 嗯嗯,感谢指教
    wocao666
        57
    wocao666  
       160 天前
    @justin2018 点进去一看,原来是 playwright 封装的
    psyer
        58
    psyer  
       116 天前
    @eluotao 青龙面板是啥?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   932 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:37 · PVG 06:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.