今回のテーマ
今回はSeleniumを使用して、ポケモン攻略さんからポケモン種族値一覧を取得し、
CSVに書き込むソースコードを見ていきます。
Seleniumの可能性の幅がとても広がると思いますので、楽しみにしていてくださいね!!
取得するポケモンの表のタグ名を確認する
まずは取得するポケモンの表について確認していきましょう!!
私もダイヤモンドパールの時代からポケモン攻略さんのホームページには何回もお世話になりました!
ほしいポケモンの情報が本当に見つけやすいんですよね。
余談は置いておいて、今回対象とするページはこれです!!
この表からポケモン名と種族値を取得してみましょう!!!
下記の手順で取得方法を探っていきます。
step
1ページ内でF12を押下し、ツールを開く
step
2ツールの右上の矢印を押し、対象のテーブルにカーソルを合わせる。
step
3htmlのソースコードが表示されるので、背景が薄灰色になっている所を確認する。
step
4class名をメモ。今回は「center stupidtable stupidtable_common」
ポケモンの種族値一覧を取得するソースコード
取得したタグ名を確認した上で、ソースコードを記述していきます。ソースコードを見てみましょう。
1 2 3 4 5 6 |
var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\", "msedgedriver.exe")); //ポケモン攻略の種族値一覧を開く。 driver.Navigate().GoToUrl("https://yakkun.com/swsh/stats_list.htm"); //表内のポケモンと種族値一覧のテキストを取得する。Replaceはアローラポケモン対策 var strpokemon = driver.FindElement(By.XPath("//table[@class='center stupidtable stupidtable_common']")) .Text.Replace("\r\n(", "("); |
ソースコードのポイントです。
GoToUrlメソッドで先ほどのURLを開く。
FindElementメソッド内でXpathメソッドを使用する。Xpathメソッドの引数でtableのクラス名を指定する。
FindElementメソッドのTextプロパティを指定することで、文字列を取得することが出来る。
コメントにも書いてありますが、Replaceメソッドはアローラやガラルポケモン対策です。改行されてしまうので^^;
取得した文字列をリストに整形
続けて、取得した情報が文字列では使いにくいので、リスト化します。
改行で各ポケモン分かれていたので、Splitメソッドを使いリスト化しました。
ポケモンの情報が" "でフォーマットされていたので、CSVのカンマにします。
1 2 3 4 5 6 7 8 9 |
//文字列をリスト化する var pokemonlist = strpokemon.Split("\r\n").ToList(); //csvの形に修正 var pokemoncsvlist = pokemonlist.Select(x => x.Replace(" ",",")).ToList(); foreach(var item in pokemoncsvlist) { Console.WriteLine(item); } |
このソースコードを見て、LinqのSelectメソッドが分からない人は下記の記事で学んでください!!
Seleniumの幅を広げる前にC#の幅を広げましょう!!
こちらもCHECK
-
【C# sharp Linq】Selectメソッド、Whereメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 C#言語のL ...
続きを見る
CSVファイルに書き込み
最後にCSVファイルに書き込みます。
1 2 3 4 |
//文字コードをShift-jisにし、csvファイルに書き込む。 String filepath = @"D:\PokemonTest\Pokemon.csv"; EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance; File.AppendAllLines(filepath, pokemoncsvlist, provider.GetEncoding("shift-jis")); |
作成したリストをAppendAllLinesメソッドでそのままファイルに書き込みます。
Excelで開きたかったので、文字コードはS-JISです。
AppendAllLinesメソッドはファイル書き込みでめちゃくちゃ便利なので、知らない方は下記の記事を読んでみてください。
こちらもCHECK
-
C# Linq ファイルの書き込み方法を紹介 Linqの抽出結果を書き込むことも可能です。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
全てのコード
今までの合わせたコードがこちらです。
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 System; using OpenQA.Selenium; using OpenQA.Selenium.Edge; using System.Linq; using System.IO; using System.Text; namespace SeleniumPractice { class Program { static void Main(string[] args) { var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\", "msedgedriver.exe")); //ポケモン攻略の種族値一覧を開く。 driver.Navigate().GoToUrl("https://yakkun.com/swsh/stats_list.htm"); //表内のポケモンと種族値一覧のテキストを取得する。Replaceはアローラポケモン対策 var strpokemon = driver.FindElement(By.XPath("//table[@class='center stupidtable stupidtable_common']")) .Text.Replace("\r\n(", "("); //文字列をリスト化する var pokemonlist = strpokemon.Split("\r\n").ToList(); //csvの形に修正 var pokemoncsvlist = pokemonlist.Select(x => x.Replace(" ",",")).ToList(); foreach(var item in pokemoncsvlist) { Console.WriteLine(item); } //文字コードをShift-jisにし、csvファイルに書き込む。 String filepath = @"D:\PokemonTest\Pokemon.csv"; EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance; File.AppendAllLines(filepath, pokemoncsvlist, provider.GetEncoding("shift-jis")); } } } |
出力内容確認
Excelで開いてみました。ちゃんと出力されていますね^^
まとめ
今回はポケモン攻略さんのデータをCSVに書き込むソースコードを作成しました。
今回のようなことが出来ると、C#で出来ることがかなり増えてくるので、ぜひ使い方を覚えてくださいね!!
このブログではLinqの記事が一番多いので、Selectメソッドが分からなかった人はブログを周回して学んでくださいね!!
以上、最後まで見て頂き、ありがとうございました。