pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Python:Seleniumで検索結果がないとき(Webスクレイピング)

<前説>

PythonとSeleniumでWebスクレイピングをやってみようと暴走(妄想)している、70歳が近づく爺です。

これまでに検索後一回遷移することはできました。検索結果がなくなるまでページめくりというか頁遷移するのもエラーなくできるようになりました(まだスクリプトは公開してませんが)。

で、爺考えたのです。検索しても結果ヒットがゼロの時はどうするのかと…。その、答え(≒誤りを含む可能性も大きいが)が本日の記事の中心です。

動作環境などはご自身でご用意のほど…。すみません。

<検索結果が無いときに表示されるテキストとそのタグやクラスの有無>

検索結果が無いときに表示される文字とかその前後にHTMLタグやクラスがあるだろうと拾ってみました。「はてブ」の場合、「記事はありません」クラス属性などなくPタグで囲まれているだけなんです。Pタグといえばネット文書のどこにでも出てきそうなもので、特定しずらいのです。ま、しかたありません。ということで「div」の子要素で出てきた、というようなことでわずかに保険をかけてみました。

<Pythonスクリプト>

特定の「はてブ」をとりあえず検索し、検索結果があるかないか、というスクリプトです。

from selenium import webdriver
import time

webdriver_path=('C:\xxx\chromedriver.exe')
driver = webdriver.Chrome(webdriver_path)

#設定変数=環境に合わせ変更を
target_Word = '露国'    #探す言葉
target_site = 'https://tabi.hatenadiary.com/'   #検索対象サイト
search_Button = 'search-module-button'
none_tag = 'div p'
none_exp= '記事はありません'


#関数
def searchH(word):
    search_flag = 0 #検索結果該当 1=exist 0=none
    driver.get(target_site)
    driver.find_element_by_name('q').send_keys(word) #検索語セット
    time.sleep(2)
    driver.find_element_by_class_name(search_Button).click() #検索実行
    time.sleep(3)
    
    #検索結果の有無判定
    if driver.find_element_by_tag_name(none_tag).text !=(none_exp):
        search_flag = 1
        time.sleep(2)
    else:
        search_flag = 0 #検索結果無し
    return search_flag


#--------------------------------------------------------------------------------------------
#main
aFlag = searchH(target_Word) #関数へ検索語を渡す→戻り値1なら検索結果あり
#関数 searchHの戻り値(aFlag)で判定
if aFlag == 1:  
    print('検索結果あり')
elif aFlag == 0:
    print('検索結果なし')
driver.close
print('作業終了')

その他に必要な複数ページの遷移、収集された記事タイトルやURLなどの集積、保存などは省いてあります(本当はまだ出来上がってない…)。