【问题标题】:Use flask to get the URL from the user and compress the images使用flask从用户那里获取URL并压缩图像
【发布时间】:2019-04-17 10:30:09
【问题描述】:

我想从用户那里获取用于抓取和下载图像的 url。然后需要压缩下载的图像。如何使用烧瓶创建 UI?可能吗?我尝试了很多次,但是在爬取网站后应用程序永远不会终止,因为我无法压缩图像。我对烧瓶不太了解。

import urllib.request
from bs4 import BeautifulSoup
from PIL import Image
from io import BytesIO


def make_soup(url):
    thepage = urllib.request.urlopen(url)
    soupdata = BeautifulSoup(thepage, "html.parser")
    return soupdata


i = 1
soup = make_soup("https://www.standford.com/")

unique_srcs = []
for img in soup.findAll('img'):
    if img.get('src') not in unique_srcs:
        unique_srcs.append(img.get('src'))
for img_src in unique_srcs:
    filename = str(i)
    i = i + 1
    imagefile = open(filename + '.png', 'wb')
    imagefile.write(urllib.request.urlopen("https://www.standford.com/" + img_src).read())
    imagefile.close()

# response = urllib.request.urlopen("https://www.standford.com/" + img_src).read()
    #im = Image.open(BytesIO(response))
    #im.convert("RGB").save(filename + '.png')

压缩:

    import os
    import numpy as np
    from skimage import io
    from sklearn.cluster import MiniBatchKMeans
    from matplotlib import pyplot as plt
    import matplotlib.pyplot as mpimg
    import cv2
    algorithm = "full"
    for f in os.listdir('.'):
        if f.endswith('.png')

:
        image = io.imread(f,0)
        rows = image.shape[0]
        cols = image.shape[1]

        pixels = image.reshape(image.shape[0] * image.shape[1], image.shape[2])
        kmeans = MiniBatchKMeans(n_clusters=128, n_init=10, max_iter=200)
        kmeans.fit(pixels)

        clusters = np.asarray(kmeans.cluster_centers_, dtype=np.uint8)
        labels = np.asarray(kmeans.labels_, dtype=np.uint8)
        labels = labels.reshape(rows, cols)
        colored = clusters[labels]

        #  np.save('codebook'+f+'.npy', clusters)
        io.imsave('compressed_' + f, colored)

        img1 = mpimg.imread(f,0)
        img2 = mpimg.imread('compressed_' + f,0)
        fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 10))
        ax1.imshow(img1)
        ax1.set_title('Original image')
        ax2.imshow(img2)
        ax2.set_title('Compressed image')
        plt.show()

        fig, ax = plt.subplots(2, 1)

        img = cv2.imread(f, 0)
        ax[0].hist(img.ravel(), 256, [0, 256]);
        ax[0].set_title("Original image")
        img1 = cv2.imread('compressed_' + f,0)
        ax[1].hist(img1.ravel(), 256, [0, 256]);
        ax[1].set_title("Compressed image")
        plt.show()

        print('size of original image: ', int(os.stat(f).st_size / 1024), 'kB')
        print('size of compressed image:', int(os.stat('compressed_' + f).st_size / 1024), 'kB')

【问题讨论】:

  • 这个可以吗?我只需要建议

标签: python flask beautifulsoup web-crawler image-compression


【解决方案1】:

当然,你可以在flask中为所欲为。

您应该只注意烧瓶和刮擦。

您只需要一个用于网络爬虫的 UI 界面。

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多