Сканирование изображения с использованием колбы и красивого супа не происходит. - PullRequest
0 голосов
/ 14 ноября 2018

Я создаю приложение для сканирования изображений с веб-сайта, используя колбу для получения пользовательского ввода. Но процесс подачи заявки не заканчивается и продолжает выдавать это сообщение в терминале. Я на самом деле хочу прекратить колбу после сканирования изображений

"127.0.0.1 - - [14 / Nov / 2018 12:00:44]" GET /static/script.js HTTP / 1.1 " 304 - "

import os
import sys
import urllib.request
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
from flask import Flask, render_template, request, redirect

ic = Flask(__name__)

count = 0

@ic.route("/")
def main():
    if count == 1:
        return render_template("index.html", result=str((str(count) + " Image Downloaded !")))
    else:
        return render_template("index.html", result=str((str(count) + " Images Downloaded !")))


@ic.route("/get_images", methods=['POST'])
def get_images():
    _url = request.form['inputURL']
    try:
        global count
        count = 0
        code = requests.get(_url)
        text = code.text
        soup = BeautifulSoup(text)
        for img in soup.findAll('img'):
            count += 1
            if (img.get('src'))[0:4] == 'http':
                src = img.get('src')
            else:
                src = urljoin(_url, img.get('src'))
            download_image(src, count)
        return redirect("http://localhost:5000")
    except requests.exceptions.HTTPError as error:
        return render_template("index.html", result=str(error))


def download_image(url, num):
    try:
        image_name = str(num) + ".png"
        image_path = os.path.join("images/", image_name)
        urllib.request.urlretrieve(url, image_path)
    except ValueError:
        print("Invalid URL !")
    except:
        print("Unknown Exception" + str(sys.exc_info()[0]))
if __name__ == "__main__":
    ic.run()

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="refresh" content="100;url=http://localhost:5000/"/>
    <title>Image Crawler</title>
    <link href="../static/style.css" rel="stylesheet">

</head>
<body class="body">
<div class="container">
    <div class="header">
        <h3 class="text-muted">Image Crawler</h3>
    </div>

    <div class="jumbotron">
        <form name="myForm" class="form" onsubmit="return checkURL()" method="post" action="/get_images">
            <h1>Enter URL</h1>
            <input type="name" name="inputURL" class="input-text" id="inputURL" placeholder="URL"
                   required autofocus>
            <br>
            <button class="btn" id="btnSubmit" type="submit">Download Photos!</button>
        </form>
    </div>
    <div class="jumbotron">
        <h3>{{ result }}</h3>
    </div>
</div>

</body>
</html>

1 Ответ

0 голосов
/ 14 ноября 2018

Я протестировал и переработал вашу проблему, и ниже приведено решение, которое сработало. Было много ошибок и ошибок, но я их исправил. Я не буду проверять вашу форму, но если вы предоставите и обработаете хороший URL, он, вероятно, сработает. Прокомментируйте, если что-то идет не так

import os
import sys
import urllib.request
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
from flask import Flask, render_template, request, redirect

ic = Flask(__name__)

count = 0


@ic.route("/", methods=['GET'])
def main():
    if count == 1:
        return render_template("index.html", result=str((str(count) + " Image Downloaded !")))
    else:
        return render_template("index.html", result=str((str(count) + " Images Downloaded !")))


@ic.route("/get_images", methods=['POST', 'GET'])
def get_images():
    _url = 'https://www.bljesak.info' # PROVIDE URL HERE MANUALLY OR FROM A FORM
    try:
        global count
        count = 0
        code = requests.get(_url)
        text = code.text
        soup = BeautifulSoup(text, 'html.parser')
        for img in soup.findAll('img'):
            count += 1
            print(img.get('src'))
            if (img.get('src'))[0:4] == 'https':
                src = img.get('src')
                download_image(src, count)
            else:
                src = urljoin(_url, img.get('src'))
                download_image(src, count)
        return redirect("http://localhost:5000")
    except requests.exceptions.HTTPError as error:
        return render_template("index.html", result=str(error))


def download_image(url, num):
    try:
        image_name = str(num) + '.png'
        image_path = os.path.join("images/", image_name)
        print(image_name, image_path) # WAIT FOR ALL TO FINISH, IF THERE IS A LOT OF IMAGES, YOU NEED TO WAIT
        urllib.request.urlretrieve(url, image_path)
    except ValueError:
        print("Invalid URL !")
    except:
        print("Unknown Exception" + str(sys.exc_info()[0]))


if __name__ == "__main__":
    ic.run()

Кроме того, у вас есть ввод типа url, если вы хотите URL. Вам не нужно использовать name тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...