使用Regex从网站显示图像的问题

时间:2017-11-24 13:08:35

标签: python regex

我目前正试图搜索所有找到的图片的网站。我的代码成功显示所有图像,包括.jpg,.bmp& .gif注意。但是它也会显示这些图像的高度。我想知道如何更改我的代码以从输出中删除图像的高度以及整理输出,只提供附件中显示的干净链接。下面我附上了一个链接,显示了我的代码输出以及下面的当前代码。我还附上了我的理想输出。谢谢你的帮助,谢谢!

我的代码输出:https://imgur.com/a/ZxEXh

输出我正在寻找:https://imgur.com/a/eBdK8

files = re.findall(r'\<img .*\=.*', page.decode())
files.sort()
print (f'\n [+] {len(files)} IMAGES FOUND:\n')
for file in files:
    print(file)

2 个答案:

答案 0 :(得分:2)

您可以直接提取图片src

>>> images = ['<img src="demo.jpg" height=12>', '<img src="demo2.jpg" height=500>']
>>> for image in images:
        print(re.search(r'<img[^>]*src="([^"]*)"', image).group(1))

demo.jpg
demo2.jpg

如果您的输入全部为string,则可以使用findall,然后对其进行迭代

>>> images = '''<img src="demo.jog" height=12> <img src="demo.jog" height=500>'''
>>> res = re.findall(r'<img[^>]*src="([^"]*)"', images)
>>> for img in res:
        print(img)
demo.jpg
demo2.jpg

答案 1 :(得分:0)

正则表达式并不是解析HTML或XML数据的最佳工具,而BeautifulSoup则更加高效和简单。你可以这样做:

from bs4 import BeautifulSoup

...    
soup = BeautifulSoup(page.decode(), 'html.parser')
files = [ i.get("src") for i in soup.findAll('img') ]  # get the src attribute for all img tags
files.sort()
print (f'\n [+] {len(files)} IMAGES FOUND:\n')
for file in files:
    print(file)

这样,HTML就会被有效地解析,只返回真正的标签。