检查url链接是否

2024-06-16 12:09:09 发布

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

我想打开许多网址(我打开一个网址,搜索这个网站上的所有链接,也打开他们或下载图片等从这个墨水)。因此,首先我想检查url是否正确,因此我使用了if语句:

if not urlparse.urlparse(link).netloc:
 return 'broken url'

但是我注意到有些值没有通过这个语句。我偶然看到一个网站,链接看起来像://b.thumbs.redditmedia.com/7pTYj4rOii6CkkEC.jpg,但我有一个错误: ValueError: unknown url type: //b.thumbs.redditmedia.com/7pTYj4rOii6CkkEC.jpg,但我的if语句没有捕捉到这一点。 如何更精确地检查url是否正常工作?在


Tags: comurlif网站链接linknot图片
2条回答

如果不具体说明正在使用的库,可以执行以下操作:

import urllib2
import re

def is_fully_alive(url, live_check = False):
    try:
        if not urllib2.urlparse.urlparse(url).netloc:
            return False

        website = urllib2.urlopen(url)
        html = website.read()

        if website.code != 200 :
            return False

        # Get all the links
        for link in re.findall('"((http|ftp)s?://.*?)"', html):
            url = link[0]

            if not urllib2.urlparse.urlparse(url).netloc:
                return False

            if live_check:
                website = urllib2.urlopen(url)

                if website.code != 200:
                    print "Failed link : ", url
                    return False

    except Exception, e:
        print "Errored while attempting to validate link : ", url
        print e
        return False

    return True

请检查您的网址:

^{pr2}$

通过打开每个链接进行检查:

# Takes some time depending on your net speed and no. of links in the page
>>> is_fully_alive("http://www.google.com", True) 
True

检查无效的url:

>>> is_fully_alive("//www.google.com")
Errored while attempting to validate link :  //www.google.com
unknown url type: //www.google.com
False

很简单:

import urllib2

def valid_url(url):
    try:
        urllib2.urlopen(url)
        return True
    except Exception, e:
        return False

print valid_url('//b.thumbs.redditmedia.com/7pTYj4rOii6CkkEC.jpg') # False
print valid_url('http://stackoverflow.com/questions/25069947/check-if-the-url-link-is-correct') # True

你也可以通过

^{pr2}$

通常,如果要从HTML文档下载所有图像,可以执行以下操作:

for link, img in re.findall('http.?:\/\/b\.thumbs\.redditmedia\.com\/(\w+?\.(?:jpg|png|gif))', load(url)):
    if not os.path.exists(img):
        with open(img, 'w') as f:
            f.write(link)

相关问题 更多 >