Crossin的编程教室

标题: 求助:74课报错:urllib.error.HTTPError: HTTP Error 404: Not Found [打印本页]

作者: Ambition——xb    时间: 2018-4-10 16:58
标题: 求助:74课报错:urllib.error.HTTPError: HTTP Error 404: Not Found
import urllib.request,time

time_start=time.time()
data=[]
for i in range(30):
    print('reuest movie:',i)
    id=1764796+i
    url='https://api.douban.com/v2/movie/subject/%d'%id
    d=urllib.request.urlopen(url).read()
    data.append(d)
    print(i,time.time()-time_start)
print('data',len(data))


运行结果如下:
reuest movie: 0
0 0.7348060607910156
reuest movie: 1
Traceback (most recent call last):
  File "D:/Learning_Software/Python/Documents/CrossinLesson/lesson52_Multithrending.py", line 9, in <module>
    d=urllib.request.urlopen(url).read()
  File "D:\Learning_Software\Python\lib\urllib\request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "D:\Learning_Software\Python\lib\urllib\request.py", line 532, in open
    response = meth(req, response)
  File "D:\Learning_Software\Python\lib\urllib\request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "D:\Learning_Software\Python\lib\urllib\request.py", line 570, in error
    return self._call_chain(*args)
  File "D:\Learning_Software\Python\lib\urllib\request.py", line 504, in _call_chain
    result = func(*args)
  File "D:\Learning_Software\Python\lib\urllib\request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found


好像能找到第一部,剩余的就找不到了,请问 是怎么回事





作者: crossin先生    时间: 2018-4-10 17:28
把请求地址print出来,然后在浏览器里看下,有些影片是被屏蔽了,这种要用异常处理去跳过它
作者: Ambition——xb    时间: 2018-4-10 19:20
crossin先生 发表于 2018-4-10 17:28
把请求地址print出来,然后在浏览器里看下,有些影片是被屏蔽了,这种要用异常处理去跳过它 ...

经过异常处理已解决,谢谢。
但下面这个多线程的程序不能正确运行,麻烦再帮我看一下
import urllib.request, time, threading

def get_content(i):
    id=1764796+i
    try:
        url='https://api.douban.com/v2/movie/subject/%d'%id
        d=urllib.request.urlopen(url).read()
        data.append(d)
        print(i,time.time()-time_start)
    except:
        print('Not Found')
    print('data',len(data))

time_start = time.time()
data = []
for i in range(30):
    print ('request movie:', i)
    threading._start_new_thread(get_content, (i,))

input('press ENTER to exit...\n')

作者: crossin先生    时间: 2018-4-11 11:56
Ambition——xb 发表于 2018-4-10 19:20
经过异常处理已解决,谢谢。
但下面这个多线程的程序不能正确运行,麻烦再帮我看一下
import urllib.requ ...

怎么个不正常法?
如果是没输出,你先把input去掉看,或者把print改为写文件
作者: 宝丁    时间: 2018-5-28 11:53
crossin先生 发表于 2018-4-11 11:56
怎么个不正常法?
如果是没输出,你先把input去掉看,或者把print改为写文件 ...

import urllib.request,time,_thread

def get_content(i):
    id=1764796+1
    try:
        url='https://api.douban.com/v2/movie/subject/%d' % id
        d=urllib.request.urlopen(url).read()
        data.append(d)
        print(i,time.time()-time_start)
    except:
        print('Not Found!')
    print('data:',len(data))

time_start=time.time()
data=[]
for i in range(30):
    print('request movie:',i)
    _thread.start_new_thread(get_content,(i,))

input('press ENTER to exit...\n')

我按照这位同学的写了写,然后发现错误如下:

Traceback (most recent call last):
  File "C:/Users/boding/Desktop/Python/lesson74.py", line 18, in <module>
    _thread._start_new_thread(get_content,(i,))
AttributeError: 'module' object has no attribute '_start_new_thread'


所以说是参数格式不对吗?
作者: koalaoycx    时间: 2018-5-28 21:12
宝丁 发表于 2018-5-28 11:53
import urllib.request,time,_thread

def get_content(i):

我把_thread改成了threading就可以运行了~~~你可以试试,我也不知道为什么。
作者: crossin先生    时间: 2018-5-29 00:53
koalaoycx 发表于 2018-5-28 21:12
我把_thread改成了threading就可以运行了~~~你可以试试,我也不知道为什么。

似乎是版本问题
作者: BLACKADDER    时间: 2018-8-24 02:49
crossin先生 发表于 2018-4-10 17:28
把请求地址print出来,然后在浏览器里看下,有些影片是被屏蔽了,这种要用异常处理去跳过它 ...

老师,我在 2.7 版本直接复制了您的代码就能直接运行,在遇到有缺失的条目时内容是一个{Not Found}条目。但我在 3.X 版本时遇到缺失的条目就报这种错误,加了异常处理后可以正常运行。请问产生的原因时因为 2 到 3 版本的原因吗?还是我写的有问题 2.7 可以跳过 3.X 就报错了

作者: crossin先生    时间: 2018-8-25 00:06
BLACKADDER 发表于 2018-8-24 02:49
老师,我在 2.7 版本直接复制了您的代码就能直接运行,在遇到有缺失的条目时内容是一个{Not Found}条目。 ...

你把url输出来看看,如果一样的,那就是版本的差异




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5