2016-12-28 4 views
0

Ich versuche, den Inhalt der Variablen 'HTML' von einer Javascript-Antwort zu bekommen. Ich verwende das Regex-Modul, um den HTML-Code zu extrahieren, aber ich habe 'None' als Ausgabe erhalten.Regex-Modul Python, um Inhalte zu extrahieren

response = 'var port_statistics = (function(window, undefined) { 

function loadScript(url, callback) { 
    var script = document.createElement('script'); 
    script.async = true; 
    script.src = url; 
    var entry = document.getElementsByTagName('script')[0]; 
    entry.parentNode.insertBefore(script, entry); 
    script.onload = script.onreadystatechange = function() { 
     var rdyState = script.readyState; 
     if (!rdyState || /complete|loaded/.test(script.readyState)) { 
      callback(); 
      script.onload = null; 
      script.onreadystatechange = null; 
     } 
    }; 
} 

function injectCss(css) { 
    var style = document.createElement('style'); 
    style.type = 'text/css'; 
    css = css.replace(/\}/g, "}\n"); 
    if (style.styleSheet) { 
     style.styleSheet.cssText = css; 
    } else { 
     style.appendChild(document.createTextNode(css)); 
    } 
    var entry = document.getElementsByTagName('script')[0]; 
    entry.parentNode.insertBefore(style, entry); 
} 

var port_statistics = {}; 
var html = ["<div class=\"results_section\">", ", " 
<div class='\"heading\"'> Overview </div> ", 

#HERE THE CONTENT I AM TRYING TO GET 

, "", "</div>", "", "", "</div>"].join('\n'); 

var div = document.createElement('div'); 
div.innerHTML = html; 
var appendTo = document.getElementById('tag-port_statistics-widget'); 

appendTo.parentNode.insertBefore(div, appendTo); 

loadScript('https://connect.url.com//jquery-1.11.1.min.js', function() { 

    portWidget.$(function() { 
     portWidget.$('tr.parent') 
      .click(function() { 
       portWidget.$(this).siblings('.child-' + this.id).fadeToggle('slow'); 
       portWidget.$(this).find('.plus').toggle(); 
       portWidget.$(this).find('.minus').toggle(); 
      }); 
    }); 
}); 

return port_statistics; 

})(window);' 

prog=re.search("var html = [.*?].join('\n');", response) 
print(prog) #Output: None 

Ich habe auch versucht dies:

soup = BeautifulSoup(response, 'html.parser') 
print(soup.prettify()) 
div_search = re.search('["<div class=\"results_section\">",(.*), "</div>"]', soup.prettify(), re.IGNORECASE) 
print(div_search.group(0)) #Output: v 

Wie kann ich es tun, den Inhalt der Variablen zu bekommen 'html', bitte? Im zweiten Teil möchte ich diesen Inhalt verwenden, um den Inhalt des HTML-Tags mit BeautifulSoup zu analysieren.

Vielen Dank.

EDIT

Ich versuche, dies zu erhalten: ''

"<div class=\"results_section\">", ", " 
<div class='\"heading\"'> Overview </div> ", 

#HERE THE CONTENT I AM TRYING TO GET 

, "", "</div>", "", "", "</div>" 
+0

posten Sie die gewünschte Ausgabe. –

+0

Hi @ 宏杰 李, ich habe meine Antwort bearbeitet. Ich versuche, die Daten in das Array der Variablen namens "HTML" zu bekommen. Danke –

Antwort

0
result = re.search(r'var html = \[(.+?)\]', response, re.DOTALL) 
print(result.group(1)) 

(Punkt.) Im Standardmodus entspricht dies einem beliebigen Zeichen mit Ausnahme einer Newline. Wenn das Flag DOTALL angegeben wurde, entspricht dies einem beliebigen Zeichen einschließlich eines Zeilenumbaus.

Ihr Text enthält Newline, Sie müssen DOTALL verwenden, um zu passen.

+0

Danke! Tatsächlich gab es Tags wie: ' [+]', ich benutzte dies: 'result = re.search (r'var html = \' '<.*> \' ', html, re.DOTALL)' und es funktioniert perfekt! –

+0

Der var zu html Teil wird von JavaScrip gemacht, ich versuche es in Python und es funktioniert nicht. –

+0

ok danke, ich benutze oft split() und join() Funktionen, es funktioniert aber es ist nicht so effizient .. –

Verwandte Themen