2016-09-08 10 views
0

Ich versuche, einen Link von einem Skript-Tag auf einer Website zu extrahieren. zur Zeit meine regex gibt den ganzen Block aus irgendeinem Grund ..Regex gibt keine spezifische Übereinstimmung zurück

Dies ist der Inhalt des Script-Tag ich den Link zu wollen:

<script type="text/javascript"> 
var key = ''; 
var url = 'http://stream1.song365.me/h1/20160129/1772422101/The%20Beatles%20-%20There%27s%20a%20Place%20%28Studio%20Outtake%20Takes%205%20%26%206%29_(song365.cc).mp3'; 
var hqurl = 'http://stream1.song365.me/h1/20160129/1772422101/The%20Beatles%20-%20There%27s%20a%20Place%20%28Studio%20Outtake%20Takes%205%20%26%206%29_(song365.cc).mp3'; 
$(document).ready(function(){ 
    $("div[rel='digg']").click(function(){ 
     var method = $(this).attr("method"); 
     var v = parseInt($(this).find('em').html()); 
     var p = this; 
     $.post("/track/digg/2788951/" + method, function(data){ 
      if(data.status==0) 
      { 
       alert("today you have been digg it!") 
      } 
      else 
      { 
       $(p).find('em').html(data.number); 
      } 
     }, "JSON") 
    }) 
    if(url.length!=0) 
    { 
     $("#download-link").attr("href", url + "?key=" + key).css("display","");; 
    } 
    if(hqurl.length!=0) 
    { 
     $("#download-link-hq").attr("href", hqurl + "?key=" + key).css("display",""); 
    } 
}); 
</script> 

der Code Dies ist Ich habe zur Zeit:

request = requests.get(dummy_link) 
    data = request.text 
    soup = BeautifulSoup(data, 'html.parser') 
    link = soup.findAll(text=re.compile('var hqurl.*?mp3')) 

Es gibt die gesamte Skript-Tag, aber ich möchte nur die Verknüpfung zu der hqurl Variable zugewiesen.

Aktuelle Code mit Hilfe von @alecxe:

request = requests.get('https://www.song365mp3.biz/download/the-beatles-there039s-a-place-studio-outtake-takes-5-amp-6-2788951.html') 
    data = request.text 
    soup = BeautifulSoup(data, 'html.parser') 
    pattern = re.compile("var hqurl = '(.*?mp3)';$", re.MULTILINE | re.DOTALL) 
    link = soup.find("script", text=pattern) 
    print(pattern.search(link.text).group(1)) 

Aber wirft Fehler:

print((link.text).group(1)) 
AttributeError: 'ResultSet' object has no attribute 'text' 
+0

Wenn Sie eine Anfrage tun und dann Parsen der Code, den Sie geliefert haben, sind nicht die Inhalte, die Sie über den Link erhalten möchten. Wenn Sie einen Teil der geparsten HTML mit dem Link, den Sie benötigen, bereitstellen könnten, wären wir in der Lage zu helfen – DNKROZ

+0

@DNKROZ Ich habe es behoben, aber der Link spielt keine Rolle, wie es immer ändern wird. – rhillhouse

+0

Leider habe ich nicht bemerkt, dass der Code, den du gepostet hast, der Ort war, von dem du den Link extrahieren wolltest. Ich dachte, es wäre eine andere Antwort - hinzugefügt eine Antwort, die sein sollte, was Sie benötigen – DNKROZ

Antwort

1

Pre-kompilieren das Muster und Wiederverwendung sowohl für das Element Lokalisieren und Extrahieren den Link:

pattern = re.compile("var hqurl = '(.*?mp3)';", re.MULTILINE | re.DOTALL) 
link = soup.find("script", text=pattern) 
print(pattern.search(link.text).group(1)) 

Bitte beachte, dass ich den Ausdruck verbessert habe und eine Erfassungsgruppe hinzugefügt, die die eigentliche Verbindung in einem sparen würden Gruppe, auf die wir dann über .group(1) zugreifen.

Drucke:

http://stream1.song365.me/h1/20160129/1772422101/The%20Beatles%20-%20There%27s%20a%20Place%20%28Studio%20Outtake%20Takes%205%20%26%206%29_(song365.cc).mp3 
+0

Ich bekomme: 'print (pattern.search (link.text) .group (1))' 'AttributError: 'NoneType' Objekt hat kein Attribut 'text'' – rhillhouse

+0

@ou_snaaksie Bist du sicher, dass du den Code kopiert hast? Vielen Dank. – alecxe

+0

Ja, ganz sicher – rhillhouse

Verwandte Themen