Никакой поставляемой схемы и других ошибок при использовании request.get ()

Я изучаю Python, следуя Automate the Boring Stuff. Эта программа должна перейти на http://xkcd.com/ и загрузить все изображения для автономного просмотра.

Я на версии 2.7 и Mac.

По какой-то причине я получаю такие ошибки, как «Нет схемы» и ошибки с использованием самой request.get ().

Вот мой код:

# Saves the XKCD comic page for offline read import requests, os, bs4, shutil url = 'http://xkcd.com/' if os.path.isdir('xkcd') == True: # If xkcd folder already exists shutil.rmtree('xkcd') # delete it else: # otherwise os.makedirs('xkcd') # Creates xkcd foulder. while not url.endswith('#'): # If there are no more posts, it url will endswith #, exist while loop # Download the page print 'Downloading %s page...' % url res = requests.get(url) # Get the page res.raise_for_status() # Check for errors soup = bs4.BeautifulSoup(res.text) # Dowload the page # Find the URL of the comic image comicElem = soup.select('#comic img') # Any #comic img it finds will be saved as a list in comicElem if comicElem == []: # if the list is empty print 'Couldn\'t find the image!' else: comicUrl = comicElem[0].get('src') # Get the first index in comicElem (the image) and save to # comicUrl # Download the image print 'Downloading the %s image...' % (comicUrl) res = requests.get(comicUrl) # Get the image. Getting something will always use requests.get() res.raise_for_status() # Check for errors # Save image to ./xkcd imageFile = open(os.path.join('xkcd', os.path.basename(comicUrl)), 'wb') for chunk in res.iter_content(10000): imageFile.write(chunk) imageFile.close() # Get the Prev btn's URL prevLink = soup.select('a[rel="prev"]')[0] # The Previous button is first <a rel="prev" href="/1535/" accesskey="p">&lt; Prev</a> url = 'http://xkcd.com/' + prevLink.get('href') # adds /1535/ to http://xkcd.com/ print 'Done!' 

Вот ошибки:

 Traceback (most recent call last): File "/Users/XKCD.py", line 30, in <module> res = requests.get(comicUrl) # Get the image. Getting something will always use requests.get() File "/Library/Python/2.7/site-packages/requests/api.py", line 69, in get return request('get', url, params=params, **kwargs) File "/Library/Python/2.7/site-packages/requests/api.py", line 50, in request response = session.request(method=method, url=url, **kwargs) File "/Library/Python/2.7/site-packages/requests/sessions.py", line 451, in request prep = self.prepare_request(req) File "/Library/Python/2.7/site-packages/requests/sessions.py", line 382, in prepare_request hooks=merge_hooks(request.hooks, self.hooks), File "/Library/Python/2.7/site-packages/requests/models.py", line 304, in prepare self.prepare_url(url, params) File "/Library/Python/2.7/site-packages/requests/models.py", line 362, in prepare_url to_native_string(url, 'utf8'))) requests.exceptions.MissingSchema: Invalid URL '//imgs.xkcd.com/comics/the_martian.png': No schema supplied. Perhaps you meant http:////imgs.xkcd.com/comics/the_martian.png? 

Дело в том, что я несколько раз читал раздел в книге о программе, читал документ «Запросы», а также рассматривал другие вопросы здесь. Мой синтаксис выглядит правильно.

Спасибо за вашу помощь!

Редактировать:

Это не сработало: comicUrl = ("http:" + comicElem [0] .get ('src')) Я думал, что добавление http: до этого избавится от ошибки, предоставленной без схемы.

  • Преобразование Python * args to list
  • Вставьте отсутствующие рабочие дни в кадре данных pandas и заполните их NaN
  • Как найти множество наиболее часто встречающихся пар слов в файле с помощью python?
  • python scrapy get href с помощью селектора css
  • Использовать печать внутри лямбда
  • Web Crawler Чтобы получить ссылки с нового сайта
  • error_callback в multiprocessing.Pool apply_async в Python 2?
  • Opencv3 и Python 2.7 на виртуальном окружении - объект AttributeError: 'module' не имеет атрибута 'createLBPHFaceRecognizer'
  • 4 Solutions collect form web for “Никакой поставляемой схемы и других ошибок при использовании request.get ()”

    измените свой comicUrl на этот

     comicUrl = comicElem[0].get('src').strip("http://") comicUrl="http://"+comicUrl if 'xkcd' not in comicUrl: comicUrl=comicUrl[:7]+'xkcd.com/'+comicUrl[7:] print "comic url",comicUrl 

    Никакая схема не означает, что вы не предоставили http:// или https:// поставляете их, и это сделает трюк.

    Изменить: посмотрите на эту строку URL !:

    URL '//imgs.xkcd.com/comics/the_martian.png':

    Id просто хотел бы прослушивать здесь, что у меня была такая же ошибка, и использовал рекомендуемый ответ @Ajay выше, но даже после добавления, что у меня все еще возникают проблемы, сразу после загрузки программы первое изображение остановится и вернет эту ошибку:

     ValueError: Unsupported or invalid CSS selector: "a[rel" 

    это означало одну из последних строк в программе, где она использует кнопку «Пред.», чтобы перейти к следующему изображению для загрузки.

    В любом случае, пройдя через документы bs4, я сделал небольшое изменение следующим образом, и теперь это выглядит нормально:

     prevLink = soup.select('a[rel^="prev"]')[0] 

    Кто-то другой может столкнуться с одной и той же проблемой, поэтому Id Id добавит этот комментарий.

    Объяснение:

    Несколько страниц XKCD имеют специальный контент, который не является простым файлом изображения. Хорошо; вы можете просто пропустить их. Если ваш селектор не найдет никаких элементов, тогда soup.select ('# comic img') вернет пустой список.

    Рабочий код:

     import requests,os,bs4,shutil url='http://xkcd.com' #making new folder if os.path.isdir('xkcd') == True: shutil.rmtree('xkcd') else: os.makedirs('xkcd') #scrapiing information while not url.endswith('#'): print('Downloading Page %s.....' %(url)) res = requests.get(url) #getting page res.raise_for_status() soup = bs4.BeautifulSoup(res.text) comicElem = soup.select('#comic img') #getting img tag under comic divison if comicElem == []: #if not found print error print('could not find comic image') else: try: comicUrl = 'http:' + comicElem[0].get('src') #getting comic url and then downloading its image print('Downloading image %s.....' %(comicUrl)) res = requests.get(comicUrl) res.raise_for_status() except requests.exceptions.MissingSchema: #skip if not a normal image file prev = soup.select('a[rel="prev"]')[0] url = 'http://xkcd.com' + prev.get('href') continue imageFile = open(os.path.join('xkcd',os.path.basename(comicUrl)),'wb') #write downloaded image to hard disk for chunk in res.iter_content(10000): imageFile.write(chunk) imageFile.close() #get previous link and update url prev = soup.select('a[rel="prev"]')[0] url = "http://xkcd.com" + prev.get('href') print('Done...') 
    Python - лучший язык программирования в мире.