今回のテーマ
こんにちは、サルモリです。本業が忙しく久しぶりの投稿となりました。
これから皆さんのお役にたてる記事をどんどん更新していきたいと思いますので、よろしくお願いします。
早速ですが、今回のテーマです。
今回のテーマ
Seleniumを使用して画像を一括でダウンロードします。
今回はSeleniumを使用して、画像をダウンロードしていきましょう。
ある程度、Seleniumを使用した人向けの記事になります。
私の作成したプログラムをただ載せるだけでは他のサイトなどで使いにくいと思うので、順を追って説明していきますね。
今回取得する画像
この記事ではBingで「ポケモン」と検索した画像を一括で取得してみます。
ブラウザは「Microsoft Edge」で行います。
Edgeでやりたくなった方は下記の記事を参考にすれば環境構築できます。
また、Seleniumの基本的な使い方も学べると思います。
-
参考【2024年2月最新版】C#でMicrosoft Edgeを自動化してみよう
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 まえがき こ ...
続きを見る
取得する属性
ブラウザのツールを使って、2番目の画像(ブリガロン、ゲッコウガ、マフォクシー」を選択しました。
ブラウザツールを見ると、画像をダウンロードするためにimgタグのsrcの内容を取得すれば良さそうです。
全体画面
ブラウザのツール拡大
早速上記のsrcの内容を取得できるプログラムを作ってみましょう!「mimg」クラスを指定すればいけそうです。
今回の例があまりよくなかったのですが、全て対象とするととんでもない数の画像をダウンロードすることになるので、1つ目のタグの画像のみを対象とします。
青い背景の画像をダウンロードします。
ブラウザのツール拡大(dgControl_listを対象とします。)
早速ソースコードを作りました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using OpenQA.Selenium; using OpenQA.Selenium.Edge; using System; namespace PokemonTwitterRanking { class Program { static void Main(string[] args) { EdgeOptions options = new EdgeOptions(); var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\test", "msedgedriver.exe"), options); driver.Navigate().GoToUrl("https://www.bing.com/images/search?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3&form=HDRSC3&first=1&tsc=ImageHoverTitle&cw=1903&ch=1007"); //全体 //var elem = driver.FindElement(By.XPath("//div[@class='dgControl dtl hover']")); //対象 var elem = driver.FindElement(By.XPath("//ul[@class='dgControl_list']")); var elemimglist = elem.FindElements(By.ClassName("mimg")); foreach (var item in elemimglist) { Console.WriteLine(item.GetAttribute("src")); } } } } |
出力結果
https://th.bing.com/th/id/OIP.WZUMmYtoJc2AYRF0G3VQZwHaJy?w=118&h=180&c=7&r=0&o=5&pid=1.7
https://th.bing.com/th/id/OIP.cOc7oGJyJ7ZdOhIk06YlEwHaEK?w=277&h=180&c=7&r=0&o=5&pid=1.7
https://th.bing.com/th/id/OIP.BFQAlCTwVmzZ_X_PLQcizQHaHa?w=156&h=180&c=7&r=0&o=5&pid=1.7
https://th.bing.com/th/id/OIP.pECL542Ke3k8ifbkzcSqYwHaEK?w=277&h=180&c=7&r=0&o=5&pid=1.7
https://th.bing.com/th/id/OIP.Pw9PPYPMrDlGB_tkScNl_AHaD3?w=297&h=180&c=7&r=0&o=5&pid=1.7
dg_Control_list配下のmimgのsrcの内容を出力できました。
簡単に説明すると、クラス名「dgControl_list」を取得して、その配下の「mimg」の要素を全て取得しています。
取得した要素の中からGetAttributeメソッドでsrcの属性を受け取っています。
ここまで出来ればもう8割型出来ています。
ダウンロード処理を作る
後は出力したsrcの内容を指定し、ダウンロードするだけです。
ダウンロードするにはWebClientクラスを使用しましょう!
ソースコードはこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using OpenQA.Selenium; using OpenQA.Selenium.Edge; using System; using System.Net; namespace PokemonTwitterRanking { class Program { static void Main(string[] args) { EdgeOptions options = new EdgeOptions(); var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\test", "msedgedriver.exe"), options); driver.Navigate().GoToUrl("https://www.bing.com/images/search?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3&form=HDRSC3&first=1&tsc=ImageHoverTitle&cw=1903&ch=1007"); //1つ上位のタグ //var elem = driver.FindElement(By.XPath("//div[@class='dgControl dtl hover']")); //1つ目のリスト driver.Manage().Window.Maximize(); var elem = driver.FindElement(By.XPath("//ul[@class='dgControl_list ']")); var elemimglist = elem.FindElements(By.ClassName("mimg")); string path = @"D:\test\pokemonimg\"; WebClient client = new WebClient(); //画像ファイルの名前 var countname = 1; foreach (var item in elemimglist) { client.DownloadFile(item.GetAttribute("src"), path + countname + ".jpg"); countname++; } driver.Close(); } } } |
出力結果
画像にはパスがないですが、「D:\test\pokemonimg\」配下に画像をダウンロードできました!!
このプログラムを皆さんがダウンロードしたいサイト用のソースコードに修正すれば、
一括でダウンロードできるプログラムを作成できると思います!!
まとめ
今回はC#のSeleniumで画像を一括でダウンロードできるソースコードを作成しました。
サイト内の沢山の画像が欲しいときなどに役に立つと思うので、
是非参考にしてください!それでは最後まで見て頂き、ありがとうございました!