1
1

More than 3 years have passed since last update.

正規表現で検索件数を取得する。SeleniumBasic VBA Python

Last updated at Posted at 2020-12-26

SeleniumBasicでスクレイピングをしているときによくつかう正規表現のまとめ

随時追記予定

■検索件数を取得する

例:食べログ検索画面で「新宿」と入力、でてきた件数を取得する
食べログで検索
検索結果:1~20 件を表示 / 全 4664 件
この「4664」を取得したい。

Windows10 エクセルでVBA操作

準備:検索対象の文字列から全角や改行コードなどを削除し正規表現を簡単にする(VBA)

vba
 Dim mozi as String
 mozi = "検索結果:1~20 件を表示 / 全 4664 件"     '対象文

 mozi = WorksheetFunction.Clean(mozi)  '改行コードなどの削除
 mozi = Replace(mozi, " ", "")     '半角空白の削除   
 mozi = Replace(mozi, " ", "")         '全角空白の削除

 Debug.Print (mozi)  '検索結果:1~20件を表示/全4664件
'↑無駄な空白が削除されました。

②検索結果:1~20件を表示/全4664件の4664を正規表現で取得する(VBA)

vba

Dim re As RegExp
Set re = New RegExp
Dim pattern As String: pattern = "全(\d+)件"     '正規表現のパターン
Dim mc As MatchCollection
Dim m As Match
Dim Matches As MatchCollection

'正規表現の指定
With re      
  .pattern = pattern
  .IgnoreCase = False     '大文字と小文字を区別するか(False)、しないか(True)
  .Global = True          '文字列全体を検索するか(True)、しないか(False)
End With    

 Set Matches = re.Execute(mozi) '↑で準備した文字列に正規表現でのマッチングを実行    

 If Matches.Count > 0 Then

  Debug.Print (Matches.Item(0))  '全4669件
' ↑この時点で「全4669件」です。なので
'このなかから席気表現パターンの()でくくった数値のみを取り出したい
  set m = Matches.Item(0)
  Debug.Print (m.SubMatches(0))  ’4669 やったー取得できた    
 End If

Pythonの場合

環境
Windows
Python3.8.3

python
import re

mozi="1~20 件を表示 / 全 4664 件"
pattern = "全(\d+)件"
mozi=mozi.replace(" ","")  #半角空白の削除
mozi=mozi.replace(" ","") #全角空白の削除
ptn=re.compile(pattern)   #正規表現のパターンを準備Patternオブジェクトがリターンされる

if result := ptn.search(mozi):    #検索実行 合致するときはMatchオブジェクト無いときはNone
    print(result.group(0))        #全4664件 マッチした文字列全体
    print(result.group(1))        #4664   ()でくくった部分

全〇〇件の〇〇の抽出はしょっちゅうつかいますね。
その他にもよくつかう正規表現随時追記していきます。
もっと簡単な方法があればご指摘いただきたいです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1