見出し画像

【Python】ChromeDriver+selenium4でgoogle自動検索 その2

ちょっと前から始めているアルバイトの関係で、
「Python+ChromeDriver+Selenium4でGoogle自動検索」
をいかに効率的に行うかをいろいろ試行錯誤したので、その際の技術的メモを残しておきます。今回は第2弾。

第1弾はコチラ。


動作環境

Windows 11 Home (64bit)
Chrome 113.0.5672.64(Official Build) (64 ビット)
chromedriver 112.0.5615.49
Python 3.11.1
Selenium 4.9


ドメイン重複をリストアップ時にはじく

Google検索するキーワードによっては、

https://xxxxx.com/
https://xxxxx.com/aaa/
https://xxxxx.com/bbb/
https://xxxxx.com/ccc/

ドメイン重複の一例

こんな感じで、同じドメインなのに複数のページが拾えちゃう。
今回の作業では1ドメインで1つURLがリストアップできればよかったので、リスト作成プログラム内で重複をはじいてしまう方法を考えました。

まあ採用するドメインのリストをどう作るかってことなんですが、
Pythonには「urllib.parse」という、URLの構文解析を一発でやってくれる便利なライブラリがありました。上記の例で行くと、「https://xxxxx.com」だけ抜き出してくれます。文字列切り貼りをちまちまコーディングするよりはるかにシンプルでスマートですね。
下記のプログラムは、「domain」というユニークなドメインリストを作りながら、重複ドメインがやってきたら標準出力に吐き出して、そうでなければユニークドメインリストに追加する、みたいなことをしています。

from urllib.parse import urlparse

domain = []

# 重複ドメインチェック
o = urlparse(url_link)
if(o.hostname in domain): 
	print('---ignore---dom---' + o.hostname + str(':') + url_link)
	continue
else:
	domain.append(o.hostname)


一度踏んだポータル系サイトを今後踏まないようにする

Webスクレイピングをしていると、どうしてもポータル系サイト、口コミランキング系サイト、SNS系サイトなどが結構拾えてしまう。
これも先ほどと同様、リスト作成プログラム内で弾く仕組みを考えました。

Webスクレイピングを繰り返すたびにどんどん新しいポータル系サイトが現れるので、除外したいサイトリストをテキストファイルに外だしして、除外したいサイトが現れるたびにテキストファイルに追記する仕組みにしました。
リスト作成プログラム本体は変更しなくても、はじいてくれるサイトがどんどん増えて、スクレイピング精度が上がる仕組みです。

youtube
twitter
facebook
instagram
wikipedia
yahoo.co.jp
rakuten.co.jp
goo.ne.jp

除外ドメインリストファイル例
# 除外ドメインリストファイル読み込み
ignore_com_filename = './setting_ignore/ignore_common_url.txt'
with open(ignore_com_filename, encoding='UTF-8', newline='') as ignore_com_file:
    csvreader = csv.reader(ignore_com_file)
    igno_com = [row for row in csvreader]
# 除外キーワードチェック
ig_url_flg = False
for k in range(len(igno_com)):
	if(igno_com[k][0] in url_link): 
		print('---ignore---key---' + igno_com[k][0] + str(':') + url_link)
		ig_url_flg = True
		break
if (ig_url_flg): continue

質問、ご指摘等あればお気軽に。


頂いたサポートは、クリエイターとしての活動費として使用させていただきます!