2016-11-26 12 views
0

正規表現を使用してURLからすべての画像をダウンロードしようとしています。Python 2.7画像URLの正規表現

私は現在だけで画像のURLを必要とする、私は現在、これは任意の画像のURLを見つけていない

def urlimage(text): 
    '''finds image url''' 
    imageurl = [] 
    imageurl = re.findall(r'https?:\/\/.*\.(?:png|jpg)', text) 
    return imageurl 

を使用しています。 私の正規表現に問題があるのですか、それとも私はこの間違いを起こしていますか?

+0

だから、すべてのURIが 'httpで開始しません://'や 'https://で'、またはそれらの一部の相対URIはありますか? BeautifulSoupなどを使用している場合、これはHTML文書ですか?最後に、 '\。*'はおそらく '\。*?'でなければなりません。 –

+0

ObLink:[正規表現を使用してHTMLを解析しない](http://stackoverflow.com/a/1732454/4014959) –

答えて

1

コメントに記載されているように、相対URLは、場合によってはBeautifulSoupなどのようなものを使用することでやりにくくなります。サイトはその後、彼らはどちらかのプロトコル(のような彼らのマークアップで//example.com/image.pngを含まなくてもよいhttphttpsの両方を介して提供している場合それは、言っ

それではあなたはこのような何かにあなたの正規表現を微調整したいと思います:。

def get_url_images_in_text(text): 
    '''finds image urls''' 
    return re.findall(r'(?:http\:|https\:)?\/\/.*\.(?:png|jpg)', text) 

私はあなたがやろうとしていると思うものの完全な例:

import re 
import requests 

def get_url_images_in_text(text): 
    '''finds image urls''' 
    urls = [] 
    results = re.findall(r'(?:http\:|https\:)?\/\/.*\.(?:png|jpg)', text) 
    for x in results: 
     if not x.startswith('http:'): 
     x = 'http:' + x 
     urls.append(x) 

    return urls 

def get_images_from_url(url): 
    resp = requests.get(url) 
    urls = get_url_images_in_text(resp.text) 
    print('urls', urls) 

if __name__ == '__main__': 
    get_images_from_url('http://stackoverflow.com') 

は印刷されます:

( 'のURL'、 [U 'http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png' U 'http://cdn.sstatic.net/Sites/stackoverflow/img/[email protected]' U 'http://i.stack.imgur.com/tKsDb.png' U 'http://i.stack.imgur.com/6HFc3.png' U 'http://i.stack.imgur.com/aABck.png' U 'http://i.stack.imgur.com/aABck.png' U 'http://i.stack.imgur.com/tKsDb.png'、 U 'http://i.stack.imgur.com/tKsDb.png'])