图像 url 的 Python 2.7 正则表达式

2br*_*low 2 python regex python-2.7

我正在尝试使用正则表达式从 URL 下载所有图像。

我目前只需要图像的 URL,我正在使用

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

目前这没有找到任何图片网址。我的正则表达式有问题还是我做错了?

Jac*_*ack 6

正如评论中提到的,相对 URL 会使事情变得棘手,在这种情况下,使用像 BeautifulSoup 这样的东西更难。也就是说,如果一个站点同时服务于两者httphttps那么它们可能不包含协议(就像//example.com/image.png在它们的标记中一样。

那么你想将你的正则表达式调整为这样的:

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

我认为您正在尝试做的完整示例:

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')
Run Code Online (Sandbox Code Playgroud)

会打印:

('urls', [u' http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png ', u' http://cdn.sstatic.net/Sites/stackoverflow/img /apple-touch-icon@2.png ', u' http://i.stack.imgur.com/tKsDb.png ', u' http://i.stack.imgur.com/6HFc3.png ',你' http://i.stack.imgur.com/aABck.png ',你' http://i.stack.imgur.com/aABck.png ',你' http://i.stack.imgur。 com/tKsDb.png ', u' http://i.stack.imgur.com/tKsDb.png '])