Python爬虫中使用Splash遇到的问题,手册让我懵逼了

文档在安装时候 https://splash.readthedocs.io/en/latest/install.html
使用 docker 安装 类似‘ sudo docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash ’的命令启动 splash

但是在文档代理的部分写着下面的话:
‘ If you run Splash using Docker, check Folders Sharing.’
https://splash.readthedocs.io/en/latest/api.html?highlight=proxy#proxy-profiles

看安装页都是使用 docker 安装 这不都是使用 docker 安装的吗? If u 是啥意思 splash 还有别的安装途径吗
Python爬虫中使用Splash遇到的问题,手册让我懵逼了


10 回复

好像就是有…就在安装下面一点…

有走过的老哥吗


Splash的文档确实有点绕,主要是因为它把Lua脚本和HTTP API混在一起讲了。核心就三点:

  1. 渲染页面:用render.html端点,传URL就行
  2. 执行脚本:用execute端点,写Lua脚本控制浏览器
  3. 处理结果:返回的要么是HTML,要么是JSON

最常用的场景是抓动态页面,比如这个例子:

import requests
from urllib.parse import quote

# Splash服务地址
SPLASH_URL = 'http://localhost:8050'

def render_with_js(url):
    # 最简单的渲染,等页面完全加载
    lua_script = '''
    function main(splash)
        splash:go(splash.args.url)
        splash:wait(2)  # 等2秒让JS执行
        return splash:html()
    end
    '''
    
    response = requests.post(
        f'{SPLASH_URL}/execute',
        json={
            'lua_source': lua_script,
            'url': url
        }
    )
    return response.text

# 或者更简单的,直接用render.html(不需要写Lua)
def simple_render(url):
    response = requests.get(
        f'{SPLASH_URL}/render.html',
        params={'url': url, 'wait': 2}
    )
    return response.text

# 测试
html = simple_render('https://example.com')
print(html[:500])  # 打印前500字符

如果你需要点击按钮、填表单这些操作,才需要写完整的Lua脚本。大部分情况用render.html?url=xxx&wait=2就够了。

文档看着复杂是因为它把高级功能都列出来了,但80%的需求用基础功能就能搞定。先跑通上面这个例子,再慢慢看文档里的高级用法。

总结:先跑通基础渲染,再按需看高级功能。

但官网是还是推荐使用 docker 啊
代理又要文件共享,资料就屁一点

用到 scrapy-splash 库 应该不用这么麻烦吧
好乱啊关系

scrapy-splash 真香

你把 dockerfile 里面的命令改成 shell 脚本。不就是可以直接装 linux 上了么。

docker 跟代理两码事,完全不知道楼主在吐槽什么

我用 docker 装过 splash,scrapy 代理爬动态网页,没啥问题,就资源占用有点高

有关系的,如果不使用第三方库 scrapy-splash,代理只能走文件共享
昨天下午代理成了, 是因为使用那个三方库了, 主要问题是我代码瞎改……
关于资源占用,问一下老哥,splash 应该比 sele 那一套轻巧一点?好像没有回收内存的机制啊

高深 我一直在 linux 上调式的

诶,我申请了 splash 的 develop 账号,给了一个 key 什么的,爬虫没问题啊,可以网上找无限制的 api key

splash 就像一个隐藏的浏览器在跑网页,资源占用杠杠的,对比 chrome

回到顶部