【问题标题】:Python 2.7 Regex for image url用于图像 url 的 Python 2.7 正则表达式
【发布时间】:2017-04-10 09:04:03
【问题描述】:

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

我目前只需要图片的网址,我正在使用

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

目前没有找到任何图片网址。 我的正则表达式有问题还是我要解决这个问题?

【问题讨论】:

  • 那么,所有 URI 是否都以 http://https:// 开头,还是其中一些是相对 URI?这是一个 HTML 文档,你应该使用 BeautifulSoup 还是类似的东西?最后,\.* 应该是\.*?

标签: python regex python-2.7


【解决方案1】:

正如 cmets 中提到的,相对 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)

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

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')

将打印:

('网址', [u'http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png', 你'http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon@2.png', 你'http://i.stack.imgur.com/tKsDb.png', 你'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', 你'http://i.stack.imgur.com/tKsDb.png'])

【讨论】:

    【解决方案2】:

    >

    results = re.findall(r'(?:http\:|https\:)?\/\/.*\.(?:png|jpg)', text)
    

    最好将它用于最短匹配(*?而不是 *):

    results = re.findall(r'(?:http\:|https\:)?\/\/.*?\.(?:png|jpg)', text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      相关资源
      最近更新 更多