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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1988閲覧

複数の画像を保存したいです。

jury_new

総合スコア31

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/07 22:44

編集2020/06/08 16:28

前提・実現したいこと

複数の画像をディレクトリに保存したいです。
現在ファイルがしっかりとすべて19個作成されたのですが、同じ画像が保存されてしまっています。
リンク通りに全ての画像を取得したいです。
ちなみに上記のfor文では、異なる画像のURLがとれています。

異なる画像のURLがとれている様子。

これが内容https://msp.c.yimg.jp/yjimage?q=XksQDoAXyLHxoogz00HtUlbeKQ8RwxIBXNLesE18LfanzXbaVJCSxg5lzyDW0.CfcTPc.uqyQGk_5JpJMysZ5eay8vteb8fNAB7LKz4RSMOZdfNWGqE4ZlmAF4f.Ca34AVF.uxJroqEBXJ98Nu9_&sig=13a5plidl&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=vo8En0oXyLEuenVktykTK.0z7Ywhfc0mbO315.XhVx28xP8H0jsrfaSSGFHyQN7LQe_U27TWGSR5EKKUNr0DPPOxXcYJxAPPLejECys4V8_7T9_O97VSDRHya3vAZUcEMjyRGj9PNuicK6wtjkmcVBY-&sig=13cafubeq&x=300&y=168 これが内容https://msp.c.yimg.jp/yjimage?q=Dt7w3tcXyLFMe.2z3.eA75r2CI78dzV4NIDVkMEZLEaw0KJcRIDKtOqZKlcC1rxaGUx0ITv4gob3a90hxR3TAlM6kJOVZKCxhYPyAdYsqXvJKk6a1mIqBCyEDg4MDWS0eGHw1HjLegSNY.zePzjg&sig=13a1brdhv&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=mfiwUWMXyLHDgRRDDIIIqsFCwPp1meul.3JUfBBWpDNMAMNKI5q16M.ZrSyi1LDcTZiStPl.Vlc2C0ByDivfT2bF6lIlMZ1BZivzo7CkfFdUcwi4i7ZcWmbzmQ1rFAhDSuBqr9GjXJPJGSZwrCDNHA0-&sig=13cptkvd5&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=3ASplKUXyLGDKPY31dGjoe4UdlG63NrgWAIAxTuDUDcJQTjAnTYr35gFjpYn53YxTMEJ51DDAwFczRoIoVv7awNiCJNMQW5TXY97dSp88WM0Cwh8bR5MgtjxYRvQ5QatIHBwmQaMZJRw3WrCnOjN&sig=13afe9ris&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=n5Ru7YkXyLHWtvhofYG6SUZo8u5NUjiIUImO9kbrURSYRzc9Z_hk510g662DQJ_BNZVdJqSn4Md9q55o9QL23LywGuzQ4LfHGgyVqgZaZs4I6mp9.aNo3uV2wfi.IYJsdiyUezqY8_3pbsEtD.APbdg-&sig=13c7bhfe7&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=2MEmquwXyLHLsCXPB46gMqPHbsUE2bpx_2UcpIumdvV4fSHRDMZ17XHuu8p2UlFqWCaYNiGvuLnwrtQAoenNt5btapZ0Qbm4ah1ZGgofGnT2mfoapSI68M6EJ4lCSVNlcdRHW_R.MaDhtxGCl4R0MSc-&sig=13cgdihc7&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=X86q.44XyLEkexPCsLFDmk_pPoq0Hx8eLg5umUJCmOdGyeiz2PD9TNuFRuHsnOJn5_kfoFDU0DJiPHJuEvOTmkNIVqkA5ewBA1Eqi1dvTo6gGT2Aycu1jbrJfXF1iG3VbaRzFU4LhGwd13PPMDWB&sig=13agffmhs&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=1Ubp7zgXyLEss.FgalThe7HDPBckEv90uhHF6KpyNhx0ZUjRcGEb4Bhd0gq8DUUES.tgp3lKPyPaJlXlt252OUK8AwOvVgwqFxZDRC5c5VWRKP4N94YYJVPpoH_qYdYxMvBIqUlK3xyhnbS8fmHtv4Y-&sig=13c0p3l1p&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=IJjErY8XyLGwlWEWBFpmAKKufnkaNR.LER_ly7eVSBndW4x185txb2rrKjdXtgds.OYKQRigv6HeD.i6VESuxm.uSp2uADiPOJtNEepXqglKQkF_qzW9_CQFxhiQ66oi6gVEhQJoKbxinG9DOzZw&sig=13amltn7d&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=MdukpKoXyLEiD1dybJUtoi_lbr_oY7CGY1CbtWvKXmbi99udlELo4kOIZ_kaTPInKYdwaWHdwVsFxgDjot8jYV90JTuZi3r_HxCP6kNw_4T8BaQ8ujG9Yl9OCj79k6e2.FrkAyxZdgtSIFFlXEqI&sig=13aa50pi6&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=UN5O1GAXyLFNN_hm0_kmLaAMkTrqQIVFq1zs2kwO.yFnbh5Hyz3eCMJT5vV2wQ.xBQ3U152Gkg.76jOzsnaaKZXdoQ4w1iqDGSz531c6DIaTk0db1lLvvPjGZOwxdbK98dOnL6Y4L1xJmyJbXn5O&sig=13a6e9jm4&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=6_n18d8XyLH9rVOwic7CKtDKGCgDyKmdCjud9EaPX3tb8w451EIuwx5NR06TvdhVveve6djKIFGsAY0pOzjRrpnTAaC41oEAd9w4t.GjEURFEZm8FD0a8XfmBHB2yigp7xAvdBByrYl11UUTTfGY&sig=13agur98e&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=gfM8HBEXyLHdh4tnesPZpBxt4DRsS9fXXEQAkLoxsCViODebDBV.olNMWptvbdp.9gxusI0LBW.NF155cVO9NSDDrA.UAcgolmeKnhKZq3piGNeT5Wpj5NOPs_S6O_SYl730oAZLYj_Qiecf76UYWx4-&sig=13cge4ds3&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=NWp3KHYXyLGeIzmW0FY3kzB7YboWWNNNBQLiQ3ewAFoGEpfy3qF4cyOTDxeIq.h8SyxfevMr9CK1kLltgO8e4O.21JN7.V0z8fIUgcO073Xz4h75RxDZgYN7c4hvP.SshVBoUSRLExN3zJKTTVauzYs-&sig=13csoj0i9&x=290&y=173 これが内容https://msp.c.yimg.jp/yjimage?q=lEaVsOkXyLGnvCk2WWFdDzT50yLEEvHksdYV.Dq1e7bXCNBcBC6s.otK3rDJAZvVrQ4mJ.PXjnXKUNmHEwfHnX5zA_5SiNccsGbmZvGRTax07Db_Ug_yWT6tVLdbwQUAsg2pgKgzIj2mgntuwcW7&sig=13aubbufu&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=8SfpK7sXyLExPAGsJwmmHBvPkrDF2XWPwjsA8jnX4N1eFAOPIT7GFnaNTuB4McYBFgx0xD_HT21AqhcuxbtN1NZ48KNngC3Nk8qK3pRLvB0wUT6lNQE5XVlC15CRq63q0R7P26GNl.KjP7YIXbJd&sig=13a5ihmgc&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=Hyl2IJkXyLFaMcLlGPzDppn7Q1zvcLm7FjR5pH4LYFS0zuwzEieWuHWKmreF2YhUuObfk4ygHps0R4BPIVXinT3YzMdXi9pJ4jQ04xmg8TEloaKgp7icmlMHnCf1wu1MvtWVrMQ8CEhtpzCCcAuH&sig=13a2ac30r&x=275&y=183 これが内容https://msp.c.yimg.jp/yjimage?q=JPwLRo0XyLEHFafLnPkrQIJp0GkxRfPMQrBcpv3vZh.yv4S5GFOJHf6bMfzfhowH4Qhi2F1U.d9Z_.Luu5jKwjPBv8SUK3CKx8prqS8dIc5Rek4KGvHju5nCeV3VlOpvewwy4HufJO4j105i8geA&sig=13alicaco&x=259&y=194 これが内容https://msp.c.yimg.jp/yjimage?q=w1oGxlIXyLGuh1qAvHDOp_tB1yKkdhJi_6qcuJjWY0NWsJbhlh2C9tZor2qUjT.whUpitU8QF8gbOZuSDgsZHRJmQFO34Zjq4rHXiHjHeoSZIxty20CfBGv7LESQEvFdxhLSdRxhv2QR_Wc7oJYr&sig=13av68fo1&x=277&y=182 ダウンロード完了

該当のソースコード

python

1import requests 2from bs4 import BeautifulSoup 3import os 4 5url = 'https://search.yahoo.co.jp/image/search?p=%E6%A1%9C&fr=top_ga1_sa&ei=UTF-8&mfb=P051' 6 7r = requests.get(url) 8soup = BeautifulSoup(r.text,'html.parser') 9 10url_src = [] 11show = '' 12base_dir = "/Users/uematsuyuuki/Desktop/sakura_image" 13 14def download_image(url,file_path): 15 r = requests.get(url,stream=True) 16 print(r) 17 if r.status_code == 200: 18 with open(file_path,"wb") as f: 19 f.write(r.content) 20 print('Now scraping:::{}'.format(url)) 21 22for search in soup.find_all('img',attrs={'alt':'「桜」の画像検索結果'}): 23 img_src = search.get('src') 24 print('これが内容'+img_src) 25 url_src.append(img_src) 26 27for index,url in enumerate(url_src): 28 filename = "{}.jpg".format(index) 29 dire = os.path.join(base_dir,filename) 30 download_image(url=img_src,file_path=dire) 31 print(dire) 32 33print("ダウンロード完了")

試したこと

上の方にあるimg_srcの場合、print関数で出力すると異なるURLが出力されるのですが、
一番最後のfor文の中にあるdownload_imageの列を出力するとimg_srcが一つのURLしか読み込んでいないらしくファイルに保存されている画像全てが同じになってしまっています。
そこで階層を上の方にあるimg_srcに合わせてみました。ですが、結果的にダウンロードされた画像は全て同じでした。

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

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

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

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

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

guest

回答2

0

書き込みの関数が最後の一回しか実行されないようなコードになってますね

投稿2020/06/08 00:01

y_waiwai

総合スコア87747

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

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

jury_new

2020/06/08 00:40

y_waiwaiさん、ご回答ありがとうございます。 いろいろ考えて実行してみたのですが、変数rの部分をループ処理することが解決の鍵だと考えfor文などでループ処理したのですがstatusの部分で受け付けない形になってしまいました。大変恐縮ながらもう一声アドバイスいただけないでしょうか?
y_waiwai

2020/06/08 01:28

dounload_imageを一つ上のforループに加えてしまえばどうでしょう
jury_new

2020/06/08 01:42

アドバイスありがとうございます。 実行してみたところ変化はありませんでした。 ターミナル上に出力されるNow scrapingの部分の画像URLも一つのみで確認したところ同様に一番最後の画像のURLでした。
guest

0

自己解決

download_image(url=img_src,file_path=dire)の行にある、img_srcの部分が誤っていました。最初は外部からimg_srcをforなどでループさせて表示しようとしていましたが、できませんでした。もう一度考え直した結果、重大な欠陥が。for index,url in enumerate(url_src):の行でenumerateを使ってurlの格納されたリストをインデックス値とリストの中身を取り出せていたことに気づき、download_image(url=img_src,file_path=dire)をurl=urlkとしたことで解決することができました。アドバイスを頂いた方この度はありがとうございました。

投稿2020/06/09 03:45

jury_new

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問