PythonのSeleniumについての質問です。
下記のような現状なのですが、ロジックの助言をしていただけると幸いです。
○やりたいこと
某ショッピングモールで、特定のキーワードを検索して、それに紐づく関連キーワードを取得するプログラムを作成しようとしています。
手順としては
1、検索ボックスにキーワードを入力して検索
2、検索結果に表示される関連キーワードを配列で取得
3、配列に格納されている関連キーワードごとに手順1〜2を繰り返す
手順2、3でどのようにプログラムを記述すればいいか困っています。
最終的には下記のような配列を作成したいです。
[
'カメラ 安い',
'カメラ 送料無料',
'カメラ カメラ一眼レフ',
続く
]
○困っているところ
・関連キーワードがどこで終了するかわからない。
例えば’カメラ’で検索したときに
関連キーワードには'カメラ 安い'、’カメラ 送料無料’、’カメラ 一眼レフ’などが関連キーワードとして表示されます。
それらを配列に格納して、次は’カメラ 安い’を検索し、表示された関連キーワードを配列に追加する、のように1つのキーワードに対してどんどん深掘りしていくのですが、
終了するタイミング(関連キーワードがもうこれ以上表示されない状態)がキーワードによって異なるのでそれをどのようにプログラムに落とし込めばいいか困っています。
・配列の要素数が最初と異なっていく
最初に取得した関連キーワードからfor文を回しているのですが、新たに関連キーワードを追加すると配列の数が変わってしまい、
エラーが出てしまいます。
ざっくりした質問で申し訳ないのですが、よろしくお願いいたします。
※下記が現状のコードです。
python
1url = '該当モールのURL' 2searchWord = "検索キーワード" 3browser.get(url) 4totalReflectWordList = [] 5 6searchBy("検索ボックスのクラス名", searchWord) 7 8tmpReflectWords = reflectWords 9while (True): 10 try: 11 for reflectWord in reflectWords: 12 print("reflectWord : " + reflectWord) 13 inputClearBy(検索ボックスのクラス名, 40) 14 searchBy(検索ボックスのクラス名, reflectWord) 15 #関連ワードを配列で取得 16 reflectWordElements = browser.find_elements_by_css_selector(関連キーワードを含むdivのクラスセレクタ) 17 reflectWords = getReflectWordList(reflectWordElements) 18 tmpReflectWords.extend(reflectWords) 19 tmpReflectWords = set(tmpReflectWords) 20 for tmpReflectWord in tmpReflectWords: 21 print("tmpReflectWords : " + tmpReflectWord) 22 23 except Exception: 24 break 25 26#関連ワードをトータル配列に追加 27for reflectWord in reflectWords: 28 if (reflectWord not in totalReflectWordList): 29 totalReflectWordList[reflectWord] = None 30 31def inputClearBy(className, num): 32 for i in range(num): 33 searchBoxElement = browser.find_element_by_class_name(className) 34 searchBoxElement.send_keys(Keys.BACK_SPACE) 35 36def searchBy(className, keyword): 37 searchBoxElement = browser.find_element_by_class_name(className) 38 searchBoxElement.send_keys(keyword) 39 searchBoxElement.send_keys(Keys.RETURN) 40 41def click(className): 42 browser.find_element_by_class_name(className).click() 43 44def getReflectWordList(reflectWordElements): 45 reflectWords = [] 46 for reflectWordElement in reflectWordElements: 47 reflectWords.append(reflectWordElement.text) 48 return reflectWords