我正在构建一个大规模爬网程序,必须使用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
这仍然会返回字节
答案 0 :(得分:0)
简单的解决方案。
将json.dumps
添加到lambda
添加json.loads
来调用结果(解码后)