2017-09-18 3 views
1

J'ai aws-lambda fonction écrite comme ci-dessous et il renvoie le contenu html. import urllib2 importation JSONRails Nokogiri html analyse

def lambda_handler(event, context): 
    # TODO implement 

    req_url = event['url'] 
    header = {"User-Agent" : 'Mozilla/5.0'} 
    response = "" 
    try: 
     request = urllib2.Request(req_url, headers=header) 
     response = urllib2.urlopen(request).read() 
    except: 
     response = "404 called" 
    return response 

Et je parse cela dans Rails

resp = lambda.invoke(function_name: 'lambda_crawl', payload: s) 
content = resp['payload'].read 
content_get = Nokogiri::HTML(content) 

Cependant, dans content_get, il y a quelque chose de problème d'encodage incompréhensible. <li class='\"rank01\"'> si l'impression content_get il montre comme ceci si at_css ou xpath la méthode de Nokogiri ne correspond pas. Je ne sais pas pourquoi ce genre de chose se produit. J'ai essayé de supprimer les barres obliques, mais les caractères Unicode existent dans le contenu \u306e\u8a9e, donc cela ne peut pas être la solution. La vérification de l'encodage indique également qu'il est codé en 'utf-8'

Quelle est l'origine de ce problème?

+0

A quoi ressemble 'content'? – EJ2015

+0

le problème est comme je l'ai mentionné toutes les valeurs sont chevauchées avec '\ "rank01 \"' bizarre '\ \' choses –

+0

Je pense que cela va aider si vous montrez 'content' pour que les gens comprennent pourquoi cela se produit. – EJ2015

Répondre

0

ceci a été résolu en utilisant le gestionnaire node.js dans lambda, obtenant ainsi le contenu exact de la requête html.