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)
目前这没有找到任何图片网址。我的正则表达式有问题还是我做错了?
正如评论中提到的,相对 URL 会使事情变得棘手,在这种情况下,使用像 BeautifulSoup 这样的东西更难。也就是说,如果一个站点同时服务于两者http
,https
那么它们可能不包含协议(就像//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 '])