AWS Lambda Python3如何返回字符串而不是二进制(默认)CJK问题

时间:2018-09-06 07:21:07

标签: python encoding python-requests aws-lambda cjk

我正在构建一个大规模爬网程序,必须使用AWS Lambda来提高其速度。 但是由于我是从lambda读取数据的,因此它将对非英文文本进行双重编码。

类似

"b\'<!DOCTYPE html>\\\\r\\\\n<html lang=\\"ko\\">\\\\r\\\\n<head>\\\\r\\\\n\\\\t<title id=\\"browse_title\\">\\\\\'\\\\xec\\\\x8a\\\\x88\\\\xea\\\\xb0\\\\x80\\\\xeb\\\\xa7\\\\xa82\\\\\'

lambda中的代码

def get_html(url):
    r = requests.request(url=url, method="GET")
    # r.encoding = 'euc-kr'

    return {
        "html": r.content
    }

调用lambda的代码

def call_lambda_function():
    invoke_response = client.invoke(
        FunctionName="lambda_function_test",
        InvocationType="RequestResponse",
        Payload=json.dumps(payload)
    )
    data = invoke_response['Payload'].read()
    print(data)

调用lambda的输出

  

b'{“ html”:“ \ r \ n \ r \ n \ r \ n \ t \'\ uc288 \ uac00 \ ub9e82 \'7 \ uacf5 \ uc8fc   \ uadfc \ ud669 \ uacf5 \ uac1c   \“ \ uc5f0 \ uae30 \ u00b7 \ uce74 \ uc774 \ uc2a4 \ ud2b8   \ uc785 \ ud559 \ u00b7 \ u82f1 \ ubc29 \ uc1a1 \ uc0ac \ ud569 \ uaca9 \“ ....

添加decode('my-encoding')无效。它将解码,但是解码的结果是编码的字符串。 (这就是我所说的双重编码)

所以!这就是我想要的。

我想让lambda不是返回字节,而是字符串对象。

我希望有一个简单的解决方案!

否则,我已经尝试过了。 adding return str(return_target) to lambda function 这仍然会返回字节

1 个答案:

答案 0 :(得分:0)

简单的解决方案。

json.dumps添加到lambda 添加json.loads来调用结果(解码后)