我正在努力让这个循环工作在python中。
urlList = []
while True:
for r in range(1, 5000):
try:
response = urllib.request.urlopen('www.somewebsite.com/v0/info/' + str(r) + '.json')
html = response.read().decode('utf-8')
data = json.loads(html)
if 'url' in data:
urlList.append(data['url'])
if len(urlList) == 100: break
except urllib.error.HTTPError as err:
print (err)
continue
print (urlList)
如果列表长度等于100,我当前有if语句来打破while循环,这会引发urllib.error.URLError的奇怪错误:
我也试过了len(urlList)!= 100这使得进程没有运行。同时len(urlList)< 100只是使它贯穿整个范围功能。
答案 0 :(得分:5)
您的网址无效。
response = urllib.request.urlopen('www.somewebsite.com' + str(r) + '.json')
这变为:
www.somewebsite.com1.json
www.somewebsite.com2.json
www.somewebsite.com3.json
...
这些无效网址会引发urllib.error.HTTPError
错误。
现在您已更正了网址,上述内容无效。您遇到的问题是因为break
正在突破您的内循环(for
)并让您进入while
循环,这会再次重复所有内容。
尝试将代码更改为更像:
urlList = []
for r in range(1, 5000):
response = ......
...
if 'url' in data:
urlList.append(data['url'])
if len(urlList) == 100: break
这将删除while
循环。它保留了范围,这似乎对您的URL很重要。当列表大小达到100时,它就会突破这个循环。
答案 1 :(得分:0)
你有两个循环,但只有一次。
你应该保持你的休息时间来打破for循环,但是当你写while len(urlList)<100
两者都应该正确退出你的循环。
关于回复对象的另一条评论 - 致电close()