我正在构建一个大型爬行程序,必须使用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 \ u0074 \ uc744 \ uc2a4 \ ud2b8 \ uc785 \ ud559 \ u00b7 \ u82f1 \ ubc29 \ uc1a1 \ uc0ac \ ud569 \ uaca9 \“....
添加decode('my-encoding')
不会工作。它将解码,但解码结果是编码字符串。 (这是我说的双重编码)
所以!这就是我想要的。
我想让lambda不返回byte,而是字符串对象。
我希望有一个简单的解决方案!
否则我试过这个。 adding return str(return_target) to lambda function
这仍将返回字节
简单解决方案
将json.dumps
添加到lambda添加json.loads
以调用结果(解码后)