簡體   English   中英

urllib2 中的未知 url 類型錯誤

[英]Unknown url type error in urllib2

我在 SO 上搜索了很多類似的問題,但沒有找到與我的案例完全匹配的問題。

我正在嘗試使用 python 2.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>

但是,當我將相同的 url 存儲在一個變量中並嘗試從終端下載它時,沒有顯示錯誤。 我對問題是什么感到困惑。 在 python 郵件列表中遇到了類似的問題

如果沒有看到您正在抓取的頁面中的 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 並刪除任何雜散的引號。

OP反饋后更新:

打印語句的結果表明 URL 在 URL 字符串的開頭和結尾都有一個單引號字符。 不應該有任何類型的,當它被傳遞給周圍的URL任何引號urlopen() 您可以使用以下命令從 URL 字符串中刪除前導和尾隨引號(單引號和雙引號):

url = url.strip('\'"')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM