requests.exceptions.MissingSchema:无效的URL(使用bs4)

时间:2016-09-16 22:47:22

标签: python

我收到此错误: requests.exceptions.MissingSchema:URL无效' http:/1525/bg.png':未提供架构。也许你的意思是http://http:/1525/bg.png

我并不十分关心错误发生的原因,我希望能够捕获任何无效的URL错误,发出消息并继续执行其余代码。

以下是我的代码,我试图使用try / except来解决该特定错误,但它无效...

# load xkcd page
# save comic image on that page
# follow <previous> comic link
# repeat until last comic is reached

import webbrowser, bs4, os, requests

url = 'http://xkcd.com/1526/'
os.makedirs('xkcd', exist_ok=True)

while not url.endswith('#'): # - last page

    # download the page
    print('Dowloading page %s...' % (url))
    res = requests.get(url)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, "html.parser")

    # find url of the comic image (<div id ="comic"><img src="........" 
    </div
    comicElem = soup.select('#comic img')
    if comicElem == []:
        print('Could not find any images')
    else:
       comicUrl = 'http:' + comicElem[0].get('src')

       #download the image
       print('Downloading image... %s' % (comicUrl))
       res = requests.get(comicUrl)
       try:
           res.raise_for_status()
       except requests.exceptions.MissingSchema as err:
           print(err)
           continue

        # save image to folder
        imageFile = open(os.path.join('xkcd',
        os.path.basename(comicUrl)), 'wb')
        for chunk in res.iter_content(1000000):
            imageFile.write(chunk)
        imageFile.close()

#get <previous> button url
prevLink = soup.select('a[rel="prev"]')[0]
url = 'http://xkcd.com' + prevLink.get('href')

print('Done')

我不做什么? (我在python 3.5上) 感谢提前分配...

3 个答案:

答案 0 :(得分:0)

如果您不关心错误(我认为编程错误),只需使用捕获所有异常的空白除外语句。

#download the image
print('Downloading image... %s' % (comicUrl))
try:
    res = requests.get(comicUrl) # moved inside the try block
    res.raise_for_status()
except:
    continue

但另一方面,如果你的except块没有捕获异常那么它是因为异常实际发生在你的try块之外,所以将requests.get移到try块中并且异常处理应该有效(如果你仍然需要它。)

答案 1 :(得分:0)

如果您在使用错误的网址时出现此类问题,请尝试此操作。

解决方案:

import requests

correct_url = False
url = 'Ankit Gandhi' # 'https://gmail.com'
try:
    res = requests.get(url)
    correct_url = True
except:
    print("Please enter a valid URL")
if correct_url:
    """
     Do your operation
    """
    print("Correct URL")

希望这个帮助完整。

答案 2 :(得分:0)

try / except块未缓存异常的原因是该行发生了错误

res = requests.get(comicUrl)

try关键字上方。

按原样保留代码,仅将try块向上移动一行即可解决该问题。