実現したいこと
JupyterLab上でこのページで織田信長、伊達政宗、長宗我部元親の三人の画像をファイルに保存するというコードを書きたいです。その際、以下のエラーが出てきましたが、このエラーの意味がわかりませんでした。https://www.google.co.jpというドメインが足りないのでしょうか?
Invalid URL 'None': No scheme supplied. Perhaps you meant http://None?
質問
どのようにしたら、このエラーを解消することができますか?指針だけでも大変参考になりますので、どなたかご教授いただけると幸いです。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- MissingSchema Traceback (most recent call last) /var/folders/jr/2p724fh51wv7fxmql7kxyb1h0000gn/T/ipykernel_50717/4166086079.py in <module> 20 print(i, shogun_images_url) 21 ---> 22 Img=Image.open(io.BytesIO(requests.get(img_tag.get('shogun_images_urls')).content)) 23 Img.save(f'img/{i}.jpg') 24 ~/opt/anaconda3/lib/python3.9/site-packages/requests/api.py in get(url, params, **kwargs) 71 """ 72 ---> 73 return request("get", url, params=params, **kwargs) 74 75 ~/opt/anaconda3/lib/python3.9/site-packages/requests/api.py in request(method, url, **kwargs) 57 # cases, and look like a memory leak in others. 58 with sessions.Session() as session: ---> 59 return session.request(method=method, url=url, **kwargs) 60 61 ~/opt/anaconda3/lib/python3.9/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 571 hooks=hooks, 572 ) --> 573 prep = self.prepare_request(req) 574 575 proxies = proxies or {} ~/opt/anaconda3/lib/python3.9/site-packages/requests/sessions.py in prepare_request(self, request) 482 483 p = PreparedRequest() --> 484 p.prepare( 485 method=request.method.upper(), 486 url=request.url, ~/opt/anaconda3/lib/python3.9/site-packages/requests/models.py in prepare(self, method, url, headers, files, data, params, auth, cookies, hooks, json) 366 367 self.prepare_method(method) --> 368 self.prepare_url(url, params) 369 self.prepare_headers(headers) 370 self.prepare_cookies(cookies) ~/opt/anaconda3/lib/python3.9/site-packages/requests/models.py in prepare_url(self, url, params) 437 438 if not scheme: --> 439 raise MissingSchema( 440 f"Invalid URL {url!r}: No scheme supplied. " 441 f"Perhaps you meant http://{url}?" MissingSchema: Invalid URL 'None': No scheme supplied. Perhaps you meant http://None?
該当のソースコード
Python
1import requests 2from bs4 import BeautifulSoup 3url=('https://ranking.goo.ne.jp/column/8616/') 4soup=BeautifulSoup(res.text,'html.parser') 5 6 7img_tag=soup.find_all('img')[19] 8img_tag_url=img_tag['src'] 9 10img_tag_date=soup.find_all('img')[18] 11img_tag_date_url=img_tag_date['src'] 12 13img_tag_chosokabe=soup.find_all('img')[17] 14img_tag_chosokabe_url=img_tag_chosokabe['src'] 15 16shogun_images_urls=img_tag_url, img_tag_date_url, img_tag_chosokabe_url 17 18from PIL import Image 19import io 20#3枚の画像を保存 21for i, shogun_images_url in enumerate(shogun_images_urls): 22 print(i, shogun_images_url) 23 24 Img=Image.open(io.BytesIO(requests.get(img_tag.get('shogun_images_urls')).content)) 25 Img.save(f'img/{i}.jpg')
調査したこと・試したこと
エラー(MissingSchema)の原因はimg_tag.get('shogun_images_urls')がNoneだからだと思います。
という回答者様からのアドバイスから
Img=Image.open(io.BytesIO(requests.get(img_tag.get('shogun_images_urls')).content))
を下記の様に書き換えました。
Img=Image.open(io.BytesIO(requests.get(shogun_images_url).content))
すると、以下のエラーが出ました。
--------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) /var/folders/jr/2p724fh51wv7fxmql7kxyb1h0000gn/T/ipykernel_50717/81636433.py in <module> 25 Img=Image.open(io.BytesIO(requests.get(shogun_images_url).content)) 26 # Img.save('img/sample.jpg') ---> 27 Img.save(f'img/{i}.jpg') 28 29 #エラー ~/opt/anaconda3/lib/python3.9/site-packages/PIL/Image.py in save(self, fp, format, **params) 2315 fp = builtins.open(filename, "r+b") 2316 else: -> 2317 fp = builtins.open(filename, "w+b") 2318 2319 try: FileNotFoundError: [Errno 2] No such file or directory: 'img/0.jpg'
img(このファイルは作成してあります)という名前のファイルに3枚の画像をimg/0.jpg、img/1.jpg、img/2.jpgの名前で保存したいのですが、img/0.jpgという名前のファイルに画像を保存するというコードになっているのだと思います。どのようにしたら、この問題を解決できるのでしょうか?
この疑問に対して
imgはファイルですか?ファイルなのかディレクトリなのか整理された方が良いかと思います。
img ディレクトリを作成しておくとよいかと。
という回答者様からの回答をいただき、
Python
1import os 2os.mkdir('./img_diretory')
を実行したところ
imgに
img_directoryというディレクトリが作成されました。
そして、
- print(os.path.exists('img'))
- print(os.path.isfile('img'))
- print(os.path.isdir('img'))
この全ての操作を行ったところ、Falseという結果出てきました。つまり、
- ファイルまたはディレクトリ(フォルダ)の存在確認: os.path.exists()
- ファイルの存在確認: os.path.isfile()
- ディレクトリ(フォルダ)の存在確認: os.path.isdir()
全てに当てはまらないことを意味するのだと思います。
この解決策がわからなかったので、とりあえず、新規のディレクトリを作成することにしてみました。
mkdir dir1
dir1というディレクトリ名のディレクトリを作成する操作を行ったところ、
imgにdir1が作成されていました。つまりこれが意味することは、imgはディレクトリやファイルよりも大きな括りであり、ディレクトリやフォルダを作成するコードを作成した際に自動的にそこ(img)に入る存在であるということだと考えられます。
新たな疑問
- ここでのimgはどのような存在ですか
- imgに自動的にディレクトリやファイルが入る操作をやめるにはどうすれば良いでしょうか

回答1件
あなたの回答
tips
プレビュー