IMDB’den rastgele bir film sayfası seçiyor. Eğer sayfa "404"se döngüde 404 olmayan bir film sayfası bulana kadar çeviriyor. Buraya kadar her şey hoş güzel ama ben şöyle bir şey istiyorum. Mesela döngü şöyle olsa “imdb’si 7’den büyük bir film bulana kadar dön”
Ne kadar denediysem olmadı.
import requests
from lxml import html
import random
import re
from imdb import IMDb
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
a=("https://www.imdb.com/title/tt")
b=random.randint(1000000,9999999)
c=(a+str(b))
url = c
istek = requests.get(url = url)
html = istek.text
soup = BeautifulSoup(html, 'html.parser')
i=soup.title.text
z="404 Error - IMDb"
while i == z:
a=("https://www.imdb.com/title/tt")
b=random.randint(1000000,9999999)
c=(a+str(b))
url = c
istek = requests.get(url = url)
html = istek.text
soup = BeautifulSoup(html, 'html.parser')
i=soup.title.text
if (i != "404 Error - IMDb"):
break
print("Web Sayfası:", c)
print("Filmin Adı:", soup.title.text)
#print(soup.find(string=re.compile("genre")))
movie_div2 = soup.find('span', itemprop='ratingValue')
if movie_div2 is None:
print("IMDB Puanı: Derecelendirilecek kadar puanı yok.")
else:
print("IMDB Puanı:", movie_div2.text)
movie_div = soup.find('div', class_='summary_text').text
if movie_div=="Add a Plot":
print("Filmin Konusu: Yok")
else:
print("Filmin Konusu:", movie_div)
#movie_div3 = soup.find_all('div', class_='poster')
#print("POSTER:",movie_div3)
#movie_div4 = soup.find_all('div', class_='subtext')
#print("TÜR:",movie_div4)
Çıktı
Web Sayfası: https://www.imdb.com/title/tt4676528
Filmin Adı: The Removals (2016) - IMDb
IMDB Puanı: Derecelendirilecek kadar puanı yok.
Filmin Konusu:
Part-thriller, part-nightmarish examination of the widening gap between originality and technology, told with remarkable precision. Haunting and engaging, The Removals imagines where we go from here.
Python’da do...while olmadigi icin while True: if ... break kullanmak gerekecek.
Alternatif olarak veya bunun yaninda yapmani tavsiye ettigim sey ise film sayfasini alip istenen kritere (404 olmayan, 404 olmayip puani olup 7’den yukari olan) uygun olup olmadigini (True/False) donduren bir fonksiyon yazman.
Çok teşekkürler hocam. While true biraz daha ilerletti beni ve daha da sadeleştirdim.
import random
from requests import get
from bs4 import BeautifulSoup as Soup
while True:
a=("https://www.imdb.com/title/tt")
b=random.randint(1000000,9999999)
c=(a+str(b))
url=get(c)
request=url.text
soup_data=Soup(request,'html.parser')
imdb_puani=soup_data.find('span',{'itemprop':'ratingValue'})
if imdb_puani is not None:
imdb_puani=imdb_puani.text
break
print(c)
print(soup_data.title.text)
print(imdb_puani)
Fakat imdb puanı büyük olanı getiri hala yapamıyorum.
İstiyorum ki
if imdb_puani >8:
ama hata veriyor anlamıyorum.
Nereye yerleştirmeye çalıştığımı da göstereyim
while True:
a=("https://www.imdb.com/title/tt")
b=random.randint(1000000,9999999)
c=(a+str(b))
url=get(c)
request=url.text
soup_data=Soup(request,'html.parser')
imdb_puani=soup_data.find('span',{'itemprop':'ratingValue'})
if imdb_puani is not None:
imdb_puani=imdb_puani.text
if imdb_puani >8:
break
imdb_puani değişkenini int olarak mı tutuyorsunuz yoksa str mi? Eğer str olarak tutuyorsanız karşılaştırma yapılamaz. Aynı şekilde None olduğunda da yapılamaz.
import random
from requests import get
from bs4 import BeautifulSoup as Soup
while True:
a=("https://www.imdb.com/title/tt")
b=random.randint(1000000,9999999)
c=(a+str(b))
url=get(c)
request=url.text
soup_data=Soup(request,'html.parser')
imdb_puani=soup_data.find('span',{'itemprop':'ratingValue'})
if imdb_puani is not None:
imdb_puani=imdb_puani.text
imdb_puani=float(imdb_puani)
if imdb_puani>7:
break
print(c)
print(soup_data.title.text)
print(imdb_puani)