2017-07-02 144 views
-3

如何檢查超鏈接是圖片鏈接還是網頁鏈接。如何檢查(https://)是否爲圖片或網頁鏈接

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,並跳過其他聲明。

+0

有沒有可能的方法,你可以弄清楚'any(x in'...'for x in url)'是否在做你期望的?這可能有助於縮小問題範圍。 – aug

回答

1

讓我們看看這個代碼:

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

此檢查是否有任何的URL是的字符串中。來自http'p'位於字符串中,因此您將始終得到真實的結果。

這裏是你如何檢查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... 

但是,這是一個有爭議的問題,因爲一個URL的擴展不告訴你它是否圖像。與普通文件不同,對於URL,擴展名完全不相關!您可以有一個.html URL,它提供了一個PNG圖像,或者一個.gif URL,它實際上是一個HTML網頁。您需要檢查HTTP回覆的內容類型。