在 lua 代码中转义 splash:select 查询选择器
Escape splash:select query selector within lua code
我想不出在 splash:select
中转义句号的正确方法
我在 scrapy 中有一个启动请求,它使用 lua 来等待特定元素。此元素是一个 id,id 中包含句点。我似乎无法正确地逃避这些时期。我已经尝试了单反斜杠和双反斜杠(\
和 \
)
lua_script = '''
function main(splash)
splash:set_user_agent(splash.args.ua)
assert(splash:go(splash.args.url))
while not splash:select('div#some.id.here') do
splash:wait(0.1)
end
return {html=splash:html()}
end
'''
预期结果是从请求的页面
完全加载html
实际结果是:
WARNING: Bad request to Splash: {'description': 'Error happened while executing Lua script', 'error': 400, 'type': 'ScriptError', 'info': {'error': "invalid escape sequence near '\.'", 'source': '[string "..."]', 'message': '[string "..."]:5: invalid escape sequence near \'\.\'', 'line_number': 5, 'type': 'LUA_INIT_ERROR'}}
使用\
或\
时
如果我尝试像这样转义 splash:select
中的字符串:
splash:select(\'div#some.id.here\')
代码持续运行(我相信这是朝着正确方向迈出的一步,但我认为在这个阶段代码运行正确但它试图找到多分类 div 而不是 div ID 包含句点)
您有一个包含 Lua 代码的 Python 字符串。
'splash:select(\'div#some.id.here\')'
你的飞溅物需要你逃离.
所以我们需要在前面加上一个反斜杠。
为了避免 Lua 中的无效转义序列 \.
错误,我们必须通过在前面加上另一个反斜杠来转义反斜杠。 \.
由于我们仍在 Pyhton 字符串中,因此我们必须再次转义 2 个反斜杠。导致总共有四个反斜杠。
'splash:select(\'div#some\\.id\\.here\')'
Python '\\.'
将被 Lua 解释为 '\.'
,最终将在您的 splash:select
调用中显示为 '\.'
我希望这是有道理的。我无法测试它。
我想不出在 splash:select
我在 scrapy 中有一个启动请求,它使用 lua 来等待特定元素。此元素是一个 id,id 中包含句点。我似乎无法正确地逃避这些时期。我已经尝试了单反斜杠和双反斜杠(\
和 \
)
lua_script = '''
function main(splash)
splash:set_user_agent(splash.args.ua)
assert(splash:go(splash.args.url))
while not splash:select('div#some.id.here') do
splash:wait(0.1)
end
return {html=splash:html()}
end
'''
预期结果是从请求的页面
完全加载html实际结果是:
WARNING: Bad request to Splash: {'description': 'Error happened while executing Lua script', 'error': 400, 'type': 'ScriptError', 'info': {'error': "invalid escape sequence near '\.'", 'source': '[string "..."]', 'message': '[string "..."]:5: invalid escape sequence near \'\.\'', 'line_number': 5, 'type': 'LUA_INIT_ERROR'}}
使用\
或\
如果我尝试像这样转义 splash:select
中的字符串:
splash:select(\'div#some.id.here\')
代码持续运行(我相信这是朝着正确方向迈出的一步,但我认为在这个阶段代码运行正确但它试图找到多分类 div 而不是 div ID 包含句点)
您有一个包含 Lua 代码的 Python 字符串。
'splash:select(\'div#some.id.here\')'
你的飞溅物需要你逃离.
所以我们需要在前面加上一个反斜杠。
为了避免 Lua 中的无效转义序列 \.
错误,我们必须通过在前面加上另一个反斜杠来转义反斜杠。 \.
由于我们仍在 Pyhton 字符串中,因此我们必须再次转义 2 个反斜杠。导致总共有四个反斜杠。
'splash:select(\'div#some\\.id\\.here\')'
Python '\\.'
将被 Lua 解释为 '\.'
,最终将在您的 splash:select
调用中显示为 '\.'
我希望这是有道理的。我无法测试它。