I am trying to get the id of respective movie name in that i need to check whether the url is working or not . If not then i need to append the movie name in the empty list
data = {'id': [nan, nan, nan,nan],
            'movie_name': ['captain-fantastic', 'passengers', 'transformers','guardians-of-the-galaxy-vol-2']}
data2 = {'id': [nan, nan, nan,nan],
        'movie_name': ['captain-fantastic', 'passengers', 'transformers','guardians-of-the-galaxy-vol.2']}
dfa = pd.DataFrame(data)
dfa2 = pd.DataFrame(data2)
from turtle import clear
from urllib.request import Request, urlopen
import pandas as pd
import urllib.request as ur, json
movie_buff_uuid= []
for i in dfa["movie_name"]:
    url = ur.urlopen("https://www.moviebuff.com/"+str(i)+".json")
    d = json.loads(url.read())['uuid']
    movie_buff_uuid.append(d)    
print(movie_buff_uuid)
if i passed the data2 in the above loop i am getting this error urllib.error.HTTPError: HTTP Error 404: Not Found to overcome this error. I have tried this
movie_buff_uuid= []
for i in dfa["movie_name"]:
    url = ur.urlopen("https://www.moviebuff.com/"+str(i)+".json")
    if url.getcode() == 404:
       d = json.loads(url.read())['uuid']
    else:
        d = i
movie_buff_uuid.append(d)
     
print(movie_buff_uuid)
Expected output:
['f8379c86-1307-4b22-b175-5000284ef6b9', '8f0c611a-4356-454d-a6d6-aac437519540', '7cd2dffa-cb31-4897-a7b0-30dcaee66104', 'guardians-of-the-galaxy-vol.2']
Any idea would be appreciated
Advertisement
Answer
As dominik-air said, you’re getting a 404 response when the file doesn’t exist. However Python’s built-in urllib raises an error when it gets this (unlike, for example, the justly popular requests library).
In Python generally we use try/catch flow to deal with this (EAFP).
Putting it all together:
import json
from time import sleep
from urllib.error import HTTPError
from urllib.request import urlopen
movie_buff_uuid = []
movies = ['captain-fantastic', 'passengers', 'transformers','guardians-of-the-galaxy-vol-2']
for movie in movies:
    try:
        url = urlopen(f"https://www.moviebuff.com/{movie}.json")
        uuid = json.loads(url.read())['uuid']
        movie_buff_uuid.append(uuid)
    except HTTPError:
        movie_buff_uuid.append(movie)
    sleep(5)  # let's avoid hitting the server too heavily
(You don’t need dataframes in the first part either :) )