Попытка получить магнитную ссылку из следующего кода

rawdata = ''' <div class="iaconbox center floatright">
            <a rel="12624681,0" class="icommentjs kaButton smallButton rightButton" href="https://kat.cr/zootopia-2016-1080p-hdrip-x264-ac3-jyk-t12624681.html#comment">209 <i class="ka ka-comment"></i></a>               <a class="icon16" href="https://kat.cr/zootopia-2016-1080p-hdrip-x264-ac3-jyk-t12624681.html" title="Verified Torrent"><i class="ka ka16 ka-verify ka-green"></i></a>                                <div data-sc-replace="" data-sc-slot="_ae58c272c09a10c792c6b17d55c20208" class="none" data-sc-params="{ &#39;name&#39;: &#39;Zootopia%202016%201080p%20HDRip%20x264%20AC3-JYK&#39;, &#39;extension&#39;: &#39;mkv&#39;, &#39;magnet&#39;: &#39;magnet:?xt=urn:btih:CE8357DED670F06329F6028D2F2CEA6F514646E0&amp;dn=zootopia+2016+1080p+hdrip+x264+ac3+jyk&amp;tr=udp%3A%2F%2Ftracker.publicbt.com%2Fannounce&amp;tr=udp%3A%2F%2Fglotorrents.pw%3A6969%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&#39; }"></div>
            <a data-nop="" title="Torrent magnet link" href="magnet:?xt=urn:btih:CE8357DED670F06329F6028D2F2CEA6F514646E0&amp;dn=zootopia+2016+1080p+hdrip+x264+ac3+jyk&amp;tr=udp%3A%2F%2Ftracker.publicbt.com%2Fannounce&amp;tr=udp%3A%2F%2Fglotorrents.pw%3A6969%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce" class="icon16 askFeedbackjs" data-id="CE8357DED670F06329F6028D2F2CEA6F514646E0"><i class="ka ka16 ka-magnet"></i></a>
            <a data-download="" title="Download torrent file" href="https://kat.cr/torrents/zootopia-2016-1080p-hdrip-x264-ac3-jyk-t12624681/" class="icon16 askFeedbackjs"><i class="ka ka16 ka-arrow-down"></i></a>
        </div> '''

Используя эту команду

rawdata[rawdata.find("<")+1:rawdata.find(">")]

Дает мне

div class = "iaconbox center floatright"

Но когда я пытаюсь найти ссылку на Магнит

rawdata[rawdata.find("href="magnet:?")+1:rawdata.find(""")]

Это дает мне

''

Что я на самом деле хочу, чтобы он мне дал

магнит:? xt = urn: btih: CE8357DED670F06329F6028D2F2CEA6F514646E0 & dn = zootopia + 2016 + 1080p + hdrip + x264 + ac3 + jyk & tr = udp% 3A% 2F% 2Ftracker.publicbtArt% 6 % 2Fannounce & tr = udp% 3A% 2F% 2Ftracker.openbittorrent.com% 3A80% 2Fannounce & tr = udp% 3A% 2F% 2Ftracker.opentrackr.org% 3A1337% 2Fannounce

С Shell это так просто, но это нужно делать с помощью самого Python.

0
SamFlynn 12 Июн 2016 в 18:07

4 ответа

Попробуйте rawdata[rawdata.find('href="magnet:?')+1:rawdata.find('"')]

1
HenryM 12 Июн 2016 в 18:10

Лучше использовать регулярное выражение.

import re

rawdata = '''your rawdata......'''
regex = re.compile('href="(.+)" class="icon16')
magnet_href = regex.search(rawdata).group(1)
1
diracccc.lu 12 Июн 2016 в 18:26

Прежде всего, как указал HenryM, вам нужно использовать одинарные кавычки или избегать ", чтобы строки были действительными.

Во-вторых, find() всегда возвращает первый индекс найденного символа. Таким образом, вы найдете первый ", а не тот, который заканчивается ссылкой. Чтобы исправить это, используйте параметр beg, чтобы определить начало поиска.

Кроме того, вам необходимо добавить длину вашего запроса к начальному индексу, поскольку find дает вам начальный индекс соответствия, а не конец, который вы ищете. Код будет выглядеть примерно так (полностью непроверенный):

start = rawdata.find('href="magnet:?') + 14
end = rawdata.find('"', beg=start)
link = rawdata[start:end]
1
Leon 12 Июн 2016 в 18:27

Входные данные - это фрагмент HTML. Вы не должны использовать регулярные выражения для его анализа .

Вместо этого используйте парсер. Вот рабочий пример с использованием BeautifulSoup парсера HTML:

from bs4 import BeautifulSoup


rawdata = ''' <div class="iaconbox center floatright">
    <a rel="12624681,0" class="icommentjs kaButton smallButton rightButton" href="https://kat.cr/zootopia-2016-1080p-hdrip-x264-ac3-jyk-t12624681.html#comment">209 <i class="ka ka-comment"></i></a>               <a class="icon16" href="https://kat.cr/zootopia-2016-1080p-hdrip-x264-ac3-jyk-t12624681.html" title="Verified Torrent"><i class="ka ka16 ka-verify ka-green"></i></a>                                <div data-sc-replace="" data-sc-slot="_ae58c272c09a10c792c6b17d55c20208" class="none" data-sc-params="{ &#39;name&#39;: &#39;Zootopia%202016%201080p%20HDRip%20x264%20AC3-JYK&#39;, &#39;extension&#39;: &#39;mkv&#39;, &#39;magnet&#39;: &#39;magnet:?xt=urn:btih:CE8357DED670F06329F6028D2F2CEA6F514646E0&amp;dn=zootopia+2016+1080p+hdrip+x264+ac3+jyk&amp;tr=udp%3A%2F%2Ftracker.publicbt.com%2Fannounce&amp;tr=udp%3A%2F%2Fglotorrents.pw%3A6969%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&#39; }"></div>
    <a data-nop="" title="Torrent magnet link" href="magnet:?xt=urn:btih:CE8357DED670F06329F6028D2F2CEA6F514646E0&amp;dn=zootopia+2016+1080p+hdrip+x264+ac3+jyk&amp;tr=udp%3A%2F%2Ftracker.publicbt.com%2Fannounce&amp;tr=udp%3A%2F%2Fglotorrents.pw%3A6969%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&amp;tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce" class="icon16 askFeedbackjs" data-id="CE8357DED670F06329F6028D2F2CEA6F514646E0"><i class="ka ka16 ka-magnet"></i></a>
    <a data-download="" title="Download torrent file" href="https://kat.cr/torrents/zootopia-2016-1080p-hdrip-x264-ac3-jyk-t12624681/" class="icon16 askFeedbackjs"><i class="ka ka16 ka-arrow-down"></i></a>
</div> '''

soup = BeautifulSoup(rawdata, "html.parser")
print(soup.find("a", title="Torrent magnet link")["href"])

Печать:

magnet:?xt=urn:btih:CE8357DED670F06329F6028D2F2CEA6F514646E0&dn=zootopia+2016+1080p+hdrip+x264+ac3+jyk&tr=udp%3A%2F%2Ftracker.publicbt.com%2Fannounce&tr=udp%3A%2F%2Fglotorrents.pw%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce
1
Community 23 Май 2017 в 14:58
Если бы мне пришлось найти несколько экземпляров ссылки Magnet, найдет ли здесь findall () свою работу?
 – 
SamFlynn
12 Июн 2016 в 20:18
Да, конечно, используйте метод find_all() и получите атрибут href для каждого элемента, найденного в цикле.
 – 
alecxe
12 Июн 2016 в 20:27