[英]How to iterate the loop if the condition is not met
我正在尝试获取相应电影名称的 ID,因为我需要检查 url 是否正常工作。 如果没有,那么我需要 append 空列表中的电影名称
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)
打印(movie_buff_uuid)
如果我在上述循环中传递了 data2,则会收到此错误 urllib.error.HTTPError: HTTP 错误 404: Not Found 以克服此错误。 我试过这个
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)
预期 output:
['f8379c86-1307-4b22-b175-5000284ef6b9', '8f0c611a-4356-454d-a6d6-aac437519540', '7cd2dffa-cb31-4897-a7b0-30dcaee66104', 'guardians-of-the-galaxy-vol.2']
任何想法将不胜感激
正如 dominik-air 所说,当文件不存在时,您会收到 404 响应。 然而,Python 的内置urllib
在收到此错误时会引发错误(例如,与非常流行的requests
库不同)。
在 Python 中,我们通常使用 try/catch 流来处理这个问题( EAFP )。
把它们放在一起:
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
(您也不需要第一部分中的数据框:))
要检查给定的 url 是否有效,您可以阅读请求的状态代码。 404 HTTP 状态代码表示该站点不存在。 您的变量集的示例用法:
for i in dfa['movie_name']:
url = ur.urlopen("https://www.moviebuff.com/"+str(i)+".json")
if url.getcode() == 404:
# insert code you want to run here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.