2016-09-08 3 views
0

Я пытаюсь извлечь ссылку из тега скрипта на веб-сайте. в настоящее время мой регулярное выражение возвращает весь блок по какой-то причине ..Regex не возвращает определенное соответствие

Это содержимое тега сценария я хочу, чтобы получить ссылку от:

<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> 

Это код, который я в настоящее время:

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

Он возвращает весь тег скрипта, но мне нужна только ссылка, назначенная переменной hqurl.

Текущий код с помощью @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)) 

Но броски ошибка:

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

Если вы делаете запрос и затем разбор его, код, который вы поставили не содержание, которое Вы хотите получить ссылку с. Если бы вы могли предоставить часть проанализированного html необходимой вам ссылки, мы сможем помочь – DNKROZ

+0

@DNKROZ Я ее исправил, но ссылка не имеет значения, так как она всегда будет меняться. – rhillhouse

+0

Извините, я не понимал, что код, который вы отправили, был там, где вы хотели получить ссылку. Я думал, что это был другой ответ - добавлен ответ, который должен быть тем, что вам нужно – DNKROZ

ответ

1

Предварительно компилировать шаблон и повторного как для размещения элемента и извлекая ссылку:

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

Обратите внимание, что я улучшил выражение и добавил группу захвата, которая спасла бы фактическую ссылку в которую мы затем получаем через .group(1).

Печать:

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

Я получаю: 'print (pattern.search (link.text) .group (1))' 'AttributeError: объект NoneType 'имеет no attribute 'text'' – rhillhouse

+0

@ou_snaaksie Вы уверены, что скопировали код как есть? Благодарю. – alecxe

+0

Да, совершенно верно – rhillhouse