#python #flask #python-requests
#python #фляжка #python-запросы
Вопрос:
Я создаю свое первое приложение, в котором оно получает в ответ кучу URL-адресов, но когда я запускаю его через Flask, только один URL получает <response [200]>, а остальные получают [404]. Функция работает сама по себе, и проблема возникает только тогда, когда она выполняется через flask.
Я вижу, что URL-адреса передаются при использовании print, но после печати URL-адреса при печати ответа возвращается 404.
Примеры URL-адресов:
https://www.crimestoppervic.com.au/
https://bennichomes.com.au/
Функция:
def get_page_response(url):
response = requests.get(url)
return response
Фляжка:
@app.route('/', methods=['GET', 'POST'])
def index():
form = URLForm()
if form.validate_on_submit():
session['urls'] = form.urls.data
urls = session.get('urls', None)
lines = set(l for l in urls.split("n") if l)
response_list = []
for url in lines:
response = get_page_response(url)
response_list.append(response)
return render_template('index.html', title='Homepage', form=form, response_list=response_list)
return render_template('index.html', title='Homepage', form=form)
HTML — шаблон:
{% extends "base.html" %}
{% block content %}
<form action="" method="post">
{{ form.hidden_tag() }}
{{ form.urls.label }}<br>
{{ form.urls(rows='20',cols='100') }}</p><br>
{{ form.submit() }}
{% for x in response_list %}
<p>{{ x }}</p>
{% endfor %}
{% endblock %}
Формы:
from flask_wtf import FlaskForm
from wtforms import TextAreaField, SubmitField
from wtforms.validators import DataRequired
class URLForm(FlaskForm):
urls = TextAreaField('URLs', validators=[DataRequired()])
submit = SubmitField('Submit')
Комментарии:
1. не могли бы вы, пожалуйста, распечатать URL-адрес, по которому вы нажимаете?
2. Можете ли вы поделиться ценностью
form.urls.data
иlines
? Вы уверены, что вurls.split("n")
результате будут получены допустимые URL-адреса?3. Я добавил URL-адреса и значения
Ответ №1:
В случае, если у кого-то еще есть такая же проблема, ответом было удаление символа r в списке.
lines = set(l for l in urls.split("n") if l)
print(lines) #this will show you that inside the list items have r
lines = [i.replace("r", "") for i in lines] #remove r from each item