【VBA×Selenium】Webで取得したデータの「 」を削除する方法
みなさんこんにちは。
Webスクレイピングをする際、
取得したデータに謎の半角スペースが含まれていて悩まされた経験はありませんか。
その文字列の正体は「 」なのですが、
今回は、半角スペース( )を削除する方法をご紹介したいと思います。
この記事はこんな人におすすめ
この記事はこんな人におすすめです!
- VBAプログラミング:初級者~中級者
- Webスクレイピング:初級者~中級者
- コードだけサクッと取得したい人
- 効率の良いコードを書きたい人
といったところでしょうか。
Seleniumに関する過去記事
Seleniumに関する小ワザ、テクニックついては過去の記事でもご紹介しております。
今回の記事を読むメリット
「 」の削除方法を知るメリットは以下のとおりです。
- 汎用性が高く他のサイトにも応用が利く
- Webスクレイピングの基本が定着する
- 予期せぬエラーの回避
といったところでしょうか。
スクレイピングを数多く実施していると必ず発生するもので、
且つ忘れたころに直面するかと思いますので、
一度やり方を覚えてしまえばかなり有効的なスキルになるかと思います。
 が文字列に含まれる際の現象
取得した数値データを分析・加工することができず以下のようなエラーが発生するものです。
- Web画面上のデータとしては、通常の数値データと認識が可能となる。
- 取得したデータを変数に格納すると半角スペースが存在する。
- ⇒ただし、Debug.print を使用すると半角スペースの個所が「?」と表記される。
- ⇒そのため、数値のデータを文字列として認識してエラーが発生する。
- Trim関数やClean関数ではこの空白(半角スペース)を削除できない。
- Replace関数で強制的に半角スペースを削除するにも、「?」では置換できない。
 についての情報と削除不可な理由
「 」は(ノーブレークスペース Non-Breaking SPace)と言います。
目視で確認する限りはスペースですが、正確にはスペースとは異なる為、
Trim関数やReplace関数で置換・削除(除去)ができません。
ノースブレーススペースについてもっと詳しく知りたい方は、Wikipediaでもご紹介しております。
 を置換する方法
 は、直観的かつ直接的にReplace関数などを使用して削除を試みても削除不可な文字になるため
文字コードを使用して置換する必要があります。
文字コードから置換する
「 」は文字コードではChrW(160)です。
Replace関数を使用し、文字コードChrW(160)を””(空白)へ置換します。
'■Replace関数で「nbsp;」を除去する
Sub sample_Repleace_nbsp()
Dim str As String
'■取得したデータで空白は「nbsp;」
str = "test test"
'■strから「nbsp;」を除去
MsgBox Replace(str, ChrW(160), "")
'結果→「test test」→「testtest」
End Sub
上記のコードを実施すると、空白スペース( )が削除され、エラーが発生せず、数値として比較する事ができます。
文字コードの取得方法
検証用として「 」の文字コードを取得する方法になります。
ただし、ChrW関数はUnicodeをサポートしている環境のみ動作するためMacでは動作しません。
そして、文字コード自体が不明な場合は、以下AscW関数で文字コードを取得する事が可能です。
'■ASCW関数で文字コードを取得する
Sub sample_AscW_nbsp_get()
Dim str As String
'■空白は「 」と想定
str = " "
'■strの文字コードを取得
MsgBox AscW(str)
'結果→160
End Sub
最後に
いかがでしたでしょうか。
Seleniumを使用していると予測不能な謎の文字列、エラーに遭遇することが多々あります。
ですので、しっかりマスターして基本を抑えながらと実装できると業務効率も格段に向上するかと思います。
そのきっかけとして、少しでも参考になればと思います。
開発依頼について
ココナラでWebスクレイピング開発サービスを出品しております。
自分で開発をしようと思ったけど、依頼したり、何か聞きたいことがあったりしたら
いつでもお気軽にご相談ください。
また、本ブログからご依頼いただいた方については割引特典がございますので、
ご不明点と合わせてメッセージをいただけると幸いです。
Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!
Webスクレイピング以外にもWebアプリの開発サービスも出品しております。
スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?