如何检查(https://)是图像还是Web链接

时间:2017-07-02 01:36:28

标签: python beautifulsoup

如何检查超链接是图像链接还是网络链接。

image_list = []
url = 'http://www.image.jpg/'
if any(x in '.jpg .gif .png .jpeg' for x in url):
    image_list.append(url)
else:
    r = requests.get(url)
    soup =  BeautifulSoup(r.content, "html5lib")

    for link in soup.find_all('img'):
        src = link.get('src')
        if src.startswith("https"):
            image_list.append(src)

上面的代码用于查找包含图像格式的超链接,但每当我使用不包含" .jpg等的链接时..."它仍然将链接附加到image_list并跳过else语句。

1 个答案:

答案 0 :(得分:1)

让我们看看这段代码:

any(x in '.jpg .gif .png .jpeg' for x in url):

检查URL中的任何字母是否在字符串中。来自'p'的{​​{1}}位于字符串中,因此您将始终获得真实的结果。

以下是检查网址扩展名的方法:

http

但这不是一个有争议的问题,因为网址的扩展并不能告诉你它是否是一张图片。与常规文件不同,对于URL,扩展名完全无关紧要!您可以使用import posixpath import urllib.parse IMAGE_EXTS = { '.png', '.jpg', '.jpeg', '.gif' } url = 'http://example.com/' if posixpath.splitext(urllib.parse.urlparse(url).path)[1] in IMAGE_EXTS: # Has image extension... 网址为您提供PNG图片,也可以使用.html网址,这实际上是一个HTML网页。您需要检查HTTP回复的Content-Type。