Web Server'da çalıştırılan bir python kodu, sayfa her yenilendiğinde kod da yeniden çalışmıyor

Arkadaşlar herkese merhaba

from flask import Flask

import random
from requests import get
from bs4 import BeautifulSoup as Soup
import pandas
# import numpy as np
# import pandas as pd
# import numpy
import re

# from imdb import IMDb
# import cgi,os

df = pandas.read_csv('data.tsv', sep='\t')

# ia = IMDb()
# for genre in movie['genres']:
#        print(genre)
#        continue

iyi_filmler = df[(df.averageRating > 7) & (df.numVotes > 10_000)]
# toplam_oy=df[df.averageRating > 7]
# avg_ratingi_7_den_yuksek_olanlar = toplam_oy[df.numVotes > 50000]


while True:
    random_bir_eleman = iyi_filmler.sample(n=1)
    random_elemanin_tconst_degeri = random_bir_eleman["tconst"].item()
    ad = ("https://www.imdb.com/title/")
    birles = (ad + str(random_elemanin_tconst_degeri))
    url = get(birles)
    request = url.text
    soup_data = Soup(request, 'html.parser')
    imdb_puani = soup_data.find('span', {'itemprop': 'ratingValue'}).text
    yenitconst = random_elemanin_tconst_degeri.replace('tt', '')
    # movie = ia.get_movie(yenitconst)
    y = soup_data.find('span', {'id': 'titleYear'})
    ulke = soup_data.find(href=re.compile("country")).text

    if y is not None:
        y = soup_data.find('span', {'id': 'titleYear'}).a.text
        y = int(y)
    else:
        continue
    if ulke != "India" and y > 1980 and 'TV' not in soup_data.title.text and 'Episode' not in soup_data.title.text and 'Video' not in soup_data.title.text:
        break

poster = soup_data.find('div', {'class': 'poster'}).a.img['src']

print(birles)
print(soup_data.title.text)
print(imdb_puani)
print(poster)
print(ulke)

import webbrowser

webbrowser.open(birles, new=0)

app = Flask(__name__)


@app.route('/')
def hello_world():
    return birles


if __name__ == '__main__':
    app.run()

bu kod random olarak imdb’den bir film buluyor. ve bu sitede gösteriyor.

https://onurmx.pagekite.me/ (not–> pc’yi kapatırsam site gözükmeyebilir. Zaten sitede atıyorum ‘https://www.imdb.com/title/tt0104779’ sadece böyle bir yazı çıkıyor)

sorun şu ki serveri başlattığımda kod çalışıyor ve siteye random bir site düşüyor. Fakat sayfayı yenilediğim de aynı adres kalıyor. Ne zaman ki serveri yeniden başlatırsam o zaman yeni bir adres düşüyor.

İstiyorum ki sayfayı refresh yaptığımda yeni bir adres düşsün?

Yardımlar için şimdiden teşekkürler.

Merhaba,

Kod çalıştığında birles ifadesi bir defa tanımlanıyor ve siteye bağlandığınızda tanımlanan değer döndürülüyor. O yüzden her seferinde aynı çıktıyı veriyor.

Çözüm: Random film bulma kodunuzu bir fonksiyona dönüştürün. Bu fonksiyon bulduğu filmi döndürsün. birles yazmak yerine o fonksiyonu çağırın.

2 Beğeni

Cevap için çok teşekkür ederim. Evet söylediğiniz şey çok mantıklı. Kodu şu şekilde değiştirdim;

from flask import Flask

import random
from requests import get
from bs4 import BeautifulSoup as Soup
import pandas
# import numpy as np
# import pandas as pd
# import numpy
import re

# from imdb import IMDb
# import cgi,os

df = pandas.read_csv('data.tsv', sep='\t')

# ia = IMDb()
# for genre in movie['genres']:
#        print(genre)
#        continue

iyi_filmler = df[(df.averageRating > 7) & (df.numVotes > 10_000)]
# toplam_oy=df[df.averageRating > 7]
# avg_ratingi_7_den_yuksek_olanlar = toplam_oy[df.numVotes > 50000]


def film_dondur():
    while True:
        random_bir_eleman = iyi_filmler.sample(n=1)
        random_elemanin_tconst_degeri = random_bir_eleman["tconst"].item()
        ad = ("https://www.imdb.com/title/")
        birles = (ad + str(random_elemanin_tconst_degeri))
        url = get(birles)
        request = url.text
        soup_data = Soup(request, 'html.parser')
        imdb_puani = soup_data.find('span', {'itemprop': 'ratingValue'}).text
        yenitconst = random_elemanin_tconst_degeri.replace('tt', '')
        # movie = ia.get_movie(yenitconst)
        y = soup_data.find('span', {'id': 'titleYear'})
        ulke = soup_data.find(href=re.compile("country")).text

        if y is not None:
            y = soup_data.find('span', {'id': 'titleYear'}).a.text
            y = int(y)
        else:
            continue
        if ulke != "India" and y > 1980 and 'TV' not in soup_data.title.text and 'Episode' not in soup_data.title.text and 'Video' not in soup_data.title.text:
            break
        print(birles)

#poster = soup_data.find('div', {'class': 'poster'}).a.img['src']

#print(birles)
#print(soup_data.title.text)
#print(imdb_puani)
#print(poster)
#print(ulke)

#import webbrowser

#webbrowser.open(birles, new=0)



app = Flask(__name__)



@app.route('/')
def hello_world():
    return film_dondur()

if __name__ == '__main__':
    app.run()

çalıştırdığımda şöyle bir hata verdi

TypeError
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.

Traceback (most recent call last)
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 1953, in full_dispatch_request
return self.finalize_request(rv)
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 1968, in finalize_request
response = self.make_response(rv)
File "C:\Users\onur\PycharmProjects\flaskProject2\venv\Lib\site-packages\flask\app.py", line 2097, in make_response
raise TypeError(
TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.

You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:

dump() shows all variables in the frame
dump(obj) dumps all that's known about the object

Hatanın sebebi film_dondur’un None döndürmesi.

fonksiyon yapmadan önce bir şey döndürüyordu. şimdi nasıl None oldu anlamadım?

Fonksiyon yapmadan önce birles değişkeni aracılığıyla veriyordunuz filmi ancak şimdi fonksiyonun döndürmesi gerekiyor. Yani fonksiyonun sonunda bir return birles olmalı.

Python’da nereleri tam öğrenemediğimi anladım hocam. Çok teşekkür ederim.

Daha düne kadar Python’un P’sini bile bilmiyordum. Yazbel ve sizler sayesinde o kadar çok şey öğrendim ki. Herkese yürekten kocaman sevgiler ve saygılar.

1 Beğeni