質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1133閲覧

pythonで取ってきた画像がなぜか文字化けする!

mahc

総合スコア33

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/09/05 07:43

前提・実現したいこと

https://teratail.com/questions/210140
の続きです.
引き続き初歩的質問ですがよろしくお願いいたします.
ジャミラの画像を取ってきたいです.

発生している問題・エラーメッセージ

取ってきた画像が文字化けしています.

該当のソースコード

from

1from selenium.webdriver.common.keys import Keys 2from bs4 import BeautifulSoup 3import requests 4import os 5import time 6 7driver = webdriver.Chrome("C:/Users/***/chromedriver") 8 9driver.get("https://search.yahoo.co.jp/image") 10driver.find_element_by_name("p").send_keys("ジャミラ",Keys.ENTER) 11driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 12time.sleep(5) 13driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 14time.sleep(5) 15driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 16time.sleep(5) 17driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 18time.sleep(5) 19driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 20time.sleep(10) 21driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 22time.sleep(5) 23driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 24time.sleep(5) 25 26# 現在のページのurlを変数に入れる 27current_url = driver.current_url 28html = driver.page_source 29bs = BeautifulSoup(html, "lxml") 30images = bs.find_all("img") 31# imgフォルダの作成 32os.makedirs("img") 33# 取得した画像をループして保存 34for i,img in enumerate(images, start=1): 35 src = img.get("src") 36 responce = html.encode() 37 with open("img/" + "{}.jpg".format(i), "wb") as f: 38 f.write(responce) 39 40driver.quit() 41

補足情報(FW/ツールのバージョンなど)

jupyter notebookで書いています.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

画像は(SVGなど一部の形式を除けば)テキストではありませんので、文字として見ようとしても意味をなさない記号の羅列となってしまいます。

投稿2019/09/05 07:46

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mahc

2019/09/05 08:09

回答ありがとうございます! もし,何かいい解決法があればご教授賜りたいです.
maisumakun

2019/09/05 08:10

えっと、したいことは何でしょうか?
mahc

2019/09/05 08:13

ジャミラの(深層学習用の)画像を(大量に)取ってきて一つのファイルに保存したいです.
mahc

2019/09/05 08:14

一つのフォルダですね,訂正します.
maisumakun

2019/09/05 08:28

「文字化けしている」というのは、どのような操作をした時に起きたものでしょうか?
mahc

2019/09/05 08:36

私の表現の仕方がまずかったようなので先に謝罪します. maisumakun様がおっしゃられたようにどうも,私,文字として画像を見ようとしていたみたいなのでその一連の行為を「文字化け」と形容しました,すいません. 画像をそのまま,画像としてみる方法が初心者で思いつかないので教えて頂ければ幸いです.(上のコードがまずければ,お手数でなければ遠慮なくご指摘くだされば幸いです.)
maisumakun

2019/09/05 08:39

jpegファイルをふつうにエクスプローラから開いて確認したらどうなりますか?
mahc

2019/09/05 08:41

真っ白です。 取ってきたであろう番号付けされた画像らしきファイルは大量にあるのですが、何も映ってないです。
mahc

2019/09/05 11:18

他の方が回答してくれました。 ご協力ほんとに感謝致します!
guest

0

ベストアンサー

すみません、さっきの回答で伝えはぐりました。
まず、このコードだとBeautifulSoupを使う必要がないです。
seleniumで表示中のページの検索結果画像のimg要素は次のようにseleniumのみで十分取得可能です。
ただしサムネイル画像なのでリンク先の画像そのものではなく縮小版です。

pyhton

1imgs = driver.find_elements_by_css_selector('#gridlist a>img') 2for img in imgs: 3 src = img.get_attribute('src') 4 # 保存処理

また、responce = html.encode()としていますが意図が不明です。ちゃんとsrcを使ってください。writeによるバイナリの保存はそのままで大丈夫です。

python

1response = requests.get(src) 2# 画像のバイナリ 3img_binary = response.content 4# Content-Typeの取得(jpegとは限らないかも) 5# image/jpeg や image/png みたいな文字列が取得できる 6content_type = response.headers['Content-Type']

投稿2019/09/05 10:55

編集2019/09/05 10:56
kairi003

総合スコア1330

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mahc

2019/09/05 11:17

わざわざ、ご丁寧にありがとうございます! ほんとうに助かります! ワケわからんことしててすいません!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問