Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python urllib2中存在未知url类型错误_Python_Python 2.7_Beautifulsoup_Urllib2_Ubuntu 14.04 - Fatal编程技术网

Python urllib2中存在未知url类型错误

Python urllib2中存在未知url类型错误,python,python-2.7,beautifulsoup,urllib2,ubuntu-14.04,Python,Python 2.7,Beautifulsoup,Urllib2,Ubuntu 14.04,我已经搜索了很多类似的问题,但没有找到一个完全符合我的情况 我正在尝试使用Python2.7下载一个视频 这是我下载视频的代码 import urllib2 from bs4 import BeautifulSoup as bs with open('video.txt','r') as f: last_downloaded_video = f.read() webpage = urllib2.urlopen('http://*.net/watch/**-'+last_downlo

我已经搜索了很多类似的问题,但没有找到一个完全符合我的情况

我正在尝试使用Python2.7下载一个视频

这是我下载视频的代码

import urllib2
from bs4 import BeautifulSoup as bs


with open('video.txt','r') as f:
    last_downloaded_video = f.read()

webpage = urllib2.urlopen('http://*.net/watch/**-'+last_downloaded_video)

soup = bs(webpage)
a = []
for link in soup.find_all('a'):
    if link.has_attr('data-video-id'):
        a.append(link)

#try just with first data-video-id

id = a[0]['data-video-id']
webpage2 = urllib2.urlopen('http://*/video/play/'+id)
soup = bs(webpage2)
string = str(soup.find_all('script')[2])
print string
url = string.split(': ')[1].split(',')[0]
url = url.replace('"','')
print url
print type(url)

video = urllib2.urlopen(url).read()
filename = "video.mp4"
with open(filename,'wb') as f:
    f.write(video)
此代码给出未知url类型错误。回溯是

Traceback (most recent call last):
  File "naruto.py", line 26, in <module>
    video = urllib2.urlopen(url).read()
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 427, in _open
    'unknown_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1247, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib2.URLError: <urlopen error unknown url type: 'http>
回溯(最近一次呼叫最后一次):
文件“naruto.py”,第26行,在
video=urlib2.urlopen(url.read())
文件“/usr/lib/python2.7/urllib2.py”,urlopen中的第127行
return\u opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第404行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.7/urllib2.py”,第427行,打开
“未知_打开”,请求)
文件“/usr/lib/python2.7/urllib2.py”,第382行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.7/urllib2.py”,第1247行,未打开
引发url错误('未知url类型:%s'%1!'

urllib2.URLError:如果没有看到您正在抓取的页面中的HTML,很难判断原因,但是,URL开头的一个零散的
(单引号)字符可能是原因-这会导致相同的异常:

>>> import urllib2
>>> urllib2.urlopen("'http://blah.com")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "urllib2.py", line 404, in open
    response = self._open(req, data)
  File "urllib2.py", line 427, in _open
    'unknown_open', req)
  File "urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "urllib2.py", line 1249, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib2.URLError: <urlopen error unknown url type: 'http>

您的
打印url
语句的输出是什么?什么是
url[0]
?它似乎是“http”(注意字符串开头的额外单引号),在这种情况下,您需要从URL中删除它。如果您提供正在使用的实际URL,可能会更容易。打印URL提供“http://oose.io/20A6B47DA772361B05D1C4AD3CF1723A5509D0CC/video.mp4”(指向火影忍者插曲的链接,工作正常)我故意在//之后留了一个空格,因为没有显示http。我想这可能是原因,所以我在获取它之前打印了url。url打印“http://oose.io/20A6B47DA772361B05D1C4AD3CF1723A5509D0CC/video.mp4”如果url被单引号或双引号包围会有什么不同吗?@rahulmr:answer更新-您需要从url字符串中删除周围的单引号。谢谢,我已经做了一个类似url[1:][:-1]的变通方法。但我有点困惑。当我在终端中传递用引号括起来的url时,为什么这没有错?作为命令处理的一部分,shell会删除周围的引号,因此命令不会看到其他引号。在Python程序中,看起来您是从javascript的某个blob中提取URL,但您并没有删除周围的单引号(您似乎删除了双引号)。因为您正在尝试处理javascript,所以您可能能够使用json.load(string)来获得一个方便的Python对象——如果没有看到javascript,很难说是肯定的。
url = url.strip('\'"')