Перебор многострочного ввода и сопоставление с элементами базы данных - PullRequest
0 голосов
/ 10 января 2020

Мне нужна помощь в переборе ввода в написанное мной веб-приложение, которое выглядит так:

input_shot

Пользователи будут вводить несколько сотен ( или тысячи) URL-адресов, вставленных из документов Excel, каждая в новой строке, как эта. До сих пор, как вы можете видеть, я создал страницу ввода, страницу вывода и написал код для запроса к базе данных.

from flask import Flask,render_template, request
from flask_sqlalchemy import SQLAlchemy
from urllib.parse import urlparse
from sqlalchemy.ext.declarative import declarative_base


app = Flask(__name__)
app.config["DEBUG"] = True
app.config["SECRET_KEY"] = "secret_key_here"
db = SQLAlchemy(app)

SQLALCHEMY_DATABASE_URI = db.create_engine(connector_string_here))
app.config[SQLALCHEMY_DATABASE_URI]  = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db.Model = declarative_base()
class Scrapers(db.Model):
    __tablename__ = "Scrapers"

    id = db.Column(db.Integer, primary_key = True)
    scraper_dom = db.Column(db.String(255))
    scraper_id = db.Column(db.String(128))

db.Model.metadata.create_all(SQLALCHEMY_DATABASE_URI)

Session = db.sessionmaker()
Session.configure(bind=SQLALCHEMY_DATABASE_URI)
session = Session()

scrapers = session.query(Scrapers.scraper_dom, Scrapers.scraper_id).all()

@app.route("/", methods=["GET","POST"])
def index():
    if request.method == "Get":
        return render_template("url_page.html")
    else:
        return render_template("url_page.html")

@app.route("/submit", methods=["GET","POST"])
def submit():
    sites = [request.form["urls"]]
    for site in sites:
        que = urlparse(site).netloc
    return render_template("submit.html", que=que)

#scrapers.filter(Scrapers.scraper_dom.in_(
#next(x.scraper_id for x in scrapers if x.matches(self.fnetloc))

Как очевидно, это неполно. Я пропустил предыдущие попытки сопоставления ввода, так как понял, что у меня есть проблемы с итерацией ввода. Сначала я мог заставить его печатать только все входные данные, а не перебирать их. И теперь он печатается так:

output_shot

Что просто повторяет urlparse(site).netloc для первой строки ввода, какое-то случайное число раз. Он правильно анализирует и возвращает фактическое значение, которое мне нужно будет использовать позже (для каждого urlparse(site).netloc соответствует scraper_dom и возвращается связанный scraper_id). Теперь, однако, я пытался использовать input(), но продолжал получать ошибки, когда [request.form["urls"]] не являлся повторяемым.

Пожалуйста, помогите, это будет высоко ценится.

Вывод сайтов : sites_output

Новый вывод с:

que = [urlparse(site).netloc for site in request.form["urls"].split('\n')]

without_for_loop

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