2017-07-02 4 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

'任意の(x in 'urlのxの' ... 'が)あなたが期待していることをしているかどうかは分かりますか?それは問題の絞り込みに役立ちます。 – aug

答えて

1

はのは、このコードを見てみましょう:

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

これをチェックし、URL内の任意の文字が文字列である場合。 から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... 

をしかし、URLの拡張子が、それはイメージだかどうかは教えてくれないので、それは、議論の余地がポイントです。通常のファイルとは異なり、URLの拡張子は完全に無関係です! .htmlのURLにはPNG形式の画像を、.gifというURLは実際にはHTMLのWebページにすることができます。 HTTP応答のContent-Typeをチェックする必要があります。

関連する問題