代码之家  ›  专栏  ›  技术社区  ›  Joe Bloggs

使用正则表达式显示网站图像的问题

  •  0
  • Joe Bloggs  · 技术社区  · 7 年前

    我目前正试图在一个网站上搜索所有找到的图片。我的代码成功显示了所有图像,包括。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 回复  |  直到 7 年前
        1
  •  2
  •   akash karothiya    7 年前

    您可以提取图像 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
    
        2
  •  0
  •   Serge Ballesta    7 年前

    正则表达式并不是解析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,并且只返回真正的标记。