生物系研究者のpythonとか画像解析とか論文とか

主に生物系研究で使えるpythonとか画像解析とか論文の話とかをザックリ書きます

スポンサードリンク

python + selenium でgoogle検索上位10件のURLを取得する

python + seleniumgoogle検索を行なったり検索結果の画像や文言を取得する方法は見つかったが URLを取得する方法はすぐに見つからず自作した

seleniumの導入

こちらを参照

mlwbio.hatenablog.com

実際のコード

options = Options()
options.add_argument('--headless') #ヘッドレスモードを有効
driver = webdriver.Chrome("./chromedriver_win32/chromedriver.exe",options=options)
driver.set_page_load_timeout(10) #timeoutを設定10秒
driver.get('https://www.google.com/')
search = driver.find_element_by_name('q')
search.send_keys('検索したい文字列')
search.submit() #ここで検索
elems = driver.find_elements_by_class_name("r") #検索結果の取得
urls = [e.find_element_by_tag_name("a").get_attribute("href") for e in elems][:min(10, len(elems)] #URLを取得して上位10件 (10件以下であれば全部) に絞る

解説

ここは最初の設定

options = Options()
options.add_argument('--headless') #ヘッドレスモードを有効
driver = webdriver.Chrome("./chromedriver_win32/chromedriver.exe",options=options)
driver.set_page_load_timeout(10) #timeoutを設定10秒

ここでgoogleサイトを開いて検索ボックスを取得する send_keysで検索ボックスに文字を書き込む submit()はclick()でも良いが、ボタンを押す操作に当たる

driver.get('https://www.google.com/')
search = driver.find_element_by_name('q')
search.send_keys('検索したい文字列')
search.submit() #ここで検索

google検索において検索結果にはクラスとして"r"が与えられているようであるのでこれを取得する さらに検索結果にはURLに"href"属性を与えられているため、これで取得が可能 (複数のhrefがあるかまでは見ていないが、最初のhrefは必ず検索結果のURL)

elems = driver.find_elements_by_class_name("r") #検索結果の取得
urls = [e.find_element_by_tag_name("a").get_attribute("href") for e in elems][:min(10, len(elems)] #URLを取得して上位10件 (10件以下であれば全部) に絞る

error: DevToolsActivePort file doesn't exist が起こったら

これはlinuxでしか起こらないらしいが、

options.add_argument('--headless') 

options.add_argument('--headless')
options.add_argument( "--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

にすれば良いらしい

スポンサードリンク