2016-07-24 10 views

Antwort

6

Um ein bisschen mehr auf die @Bob's answer hinzufügen und unter der Annahme, Sie müssen auch das script Tag im HTML finden, das andere script Tags haben kann.

Die Idee ist, einen regulären Ausdruck zu definieren, die sowohl für locating the element with BeautifulSoup und Extrahieren des email Wert verwendet werden würde:

import re 

from bs4 import BeautifulSoup 


data = """ 
<body> 
    <script>jQuery(window).load(function() { 
     setTimeout(function(){ 
     jQuery("input[name=Email]").val("[email protected]"); 
     }, 1000); 
    });</script> 
</body> 
""" 
pattern = re.compile(r'\.val\("([^@][email protected][^@]+\.[^@]+)"\);', re.MULTILINE | re.DOTALL) 
soup = BeautifulSoup(data, "html.parser") 

script = soup.find("script", text=pattern) 
if script: 
    match = pattern.search(script.text) 
    if match: 
     email = match.group(1) 
     print(email) 

Drucke: [email protected].

Hier verwenden wir eine simple regular expression for the email address, aber wir können weiter gehen und strenger sein, aber ich bezweifle, dass das für dieses Problem praktisch notwendig wäre.

2

nicht möglich, nur BeautifulSoup verwenden, aber Sie können mit BS + regulären Ausdrücke

import re 
from bs4 import BeautifulSoup as BS 

html = """<script> ... </script>""" 

bs = BS(html) 

txt = bs.script.get_text() 

email = re.match(r'.+val\("(.+?)"\);', txt).group(1) 

oder wie diese es zum Beispiel so tun:

... 

email = txt.split('.val("')[1].split('");')[0]