python中的Find命令只捕获第一个lin

2024-03-29 02:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试从以下代码中获取磁铁链接

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(""")]

它给了我

' '

我想要它给我什么

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

使用Shell很容易,但必须使用Python本身。你知道吗


Tags: divdatatrclassamphrefx264ka
3条回答

最好使用正则表达式。你知道吗

import re

rawdata = '''your rawdata......'''
regex = re.compile('href="(.+)" class="icon16')
magnet_href = regex.search(rawdata).group(1)

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

首先,正如HenryM所指出的,您需要使用单引号或转义"使字符串有效。你知道吗

其次,find()总是返回找到的字符的第一个索引。因此,您将找到第一个",而不是结束链接的那个。要解决这个问题,请使用beg参数来定义搜索的开始。你知道吗

此外,您还需要将查询的长度添加到起始索引,因为find给出的是匹配的起始索引,而不是要查找的结束索引。代码看起来像这样(完全未经测试): 你知道吗

start = rawdata.find('href="magnet:?') + 14
end = rawdata.find('"', beg=start)
link = rawdata[start:end]

相关问题 更多 >