使用regex查找并显示指向指定URL的链接

2024-09-29 01:24:27 发布

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

所以我只想提取特定网站的链接。我已经写了以下通过筛选这个网站几个小时了,但它并不适合我。你知道吗

match = re.compile('<a href="(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)(youtu|www.youtube|youtube|vimeo|dailymotion|)\.(.+?)"',re.DOTALL).findall(html)
for title in match:
    print '<a href="'+title+'>'+title+'</a>'

上述方法给出了此错误:

    print '<a href="'+title+'>'+title+'</a>'
TypeError: cannot concatenate 'str' and 'tuple' objects

如果我简单地说“print=title”,我会得到以下难看的结果

('https://www.', 'youtube', 'com/watch?v=gm2SGfjvgjM')

所有刮下的链接将如下所示:

<a href="https://www.youtube.com/watch?v=gm2SGfjvgjM"

我希望能像下面这样打印出来:

<a href="https://www.youtube.com/watch?v=gm2SGfjvgjM">youtube</a>
<a href="http://www.dailymotion.com/video/x5zuvuu">dailymotion</a>

玩Python已经有一段时间了,但是我很挣扎,哈哈。我花了无数的时间想弄出漂亮的汤,但就是弄不懂。如果可能的话,在不完全改变方法的情况下,非常感谢您的帮助。你知道吗


Tags: httpsrecomhttptitleyoutube网站链接
2条回答

您可以简单地使用:

print '<a href="'+''.join(title)+'>'+title[1]+'</a>'

匹配元素由一个元组组成,其中每个元素都是一个匹配组。因此,您将它们连接在一起形成URL,第二个元素将是您用来命名链接的组。你知道吗

你的模式看起来不错。问题在于内部的捕获组。用?:使它们都不被捕获,这样就只能同时捕获整个表达式。你知道吗

p = re.compile('<a href="((?:http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)'\
                         '(?:youtu|www.youtube|youtube|vimeo|dailymotion|)'\
                         '\.(?:.+?))"',re.DOTALL)
match = p.findall(html)
for title in match:
    print '<a href="' + title + '>' + title + '</a>'

要保留链接和域名,还需要另一个小小的更改—捕获整个表达式,并将网站名称作为两个单独的组(前者也捕获后者):

p = re.compile('<a href="((?:http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)'\
                         '(youtu|www.youtube|youtube|vimeo|dailymotion|)'\
                         '\.(?:.+?))"',re.DOTALL)

match = p.findall(html)
for title in match:
    print '<a href="' + title[0] + '>' + title[1] + '</a>'

通过title[i]访问组。你知道吗

相关问题 更多 >