SEOキーワードを自動で収集


1.VSCodeからフォルダを開く上部メニューからファイルを選択し「フォルダを開く」を選択（ショートカット　ctrl＋K+O）
==
他の開き方
①右クリック「プログラムから開く」→「VSCode」を選択

②タスクバーにVSCodeを設定する。開くフォルダをドラックアンドドロップする。
注意：フォルダ名に特殊記号（例：★など）を入れていると開けない場合があります。
注意しましょう！！

★またファイルを開いたときにターミナルが表示されていない場合があります。
ないの場合は、上部メニューから「表示」→「ターミナル」を選択します。
（ショートカット　ctrl＋@）

2. seleniumをダウンロードseleniumはブラウザを自動操作を行うことができます。
==
ターミナルを開きます。
「pip install selenium ==3.1.141.0」と入力しEnterを推しましょう。
「==3.1.141.0  」はインストールしようとしているバージョンを示しています。
「pip install selenium 」のみの場合は、最新のバージョンがインストールされます。
最新のバージョンでは互換性が悪い場合もあるので、バージョンを指定することがおすすめです。

3.Chromedriverのインストールブラウザーを自動で操作するためにChromedriverのインストールします。
==
ChromeDriverは、Selenium WebDriverを使用してGoogle Chromeを制御するために必要なドライバーです。以下は、WindowsおよびMac OS Xの両方のオペレーティングシステムでChromeDriverをインストールする手順です。

Windowsの場合：
ChromeDriverのダウンロードページ（https://chromedriver.chromium.org/downloads）にアクセスして、最新のバージョンをダウンロードします。
私は、「84.0～」をダウンロードしているので、近しいバージョンについてダウンロード方法を書いていきます。下へスクロールすると過去のバージョンをダウンロードすることができます。現在ダウンロードできる「ChromeDriver 84.0.4147.30」をクリックします。自分のOSにあったものをダウンロードします。
ダウンロードしたzipファイルを解凍します。
解凍したファイル「chromedriver.exe」を実行するPythonファイルと同じ場所に適切な場所に保存します。

Windowsの「環境変数の編集」を開き、システム環境変数の「Path」に解凍したファイルのパスを追加します。

コマンドプロンプトを開き、コマンド「chromedriver」を入力してChromeDriverが正常にインストールされたことを確認します。


 
4.seleniumでGoogleを開くためのimport
==


```python：
# ブラウザを自動操作するためseleniumをimport
from selenium import webdriver
# seleniumでEnterキーを送信する際に使用するのでimport
from selenium.webdriver.common.keys import Keys
# seleniumでヘッドレスモードを指定するためにimport
from selenium.webdriver.chrome.options import Options
# 待ち時間を指定するためにtimeをimport
import time
# 正規表現にマッチする文字列を探すためにreをimport
import re

# Googleのトップページ
URL = 'https://www.google.co.jp'

# seleniumで自動操作するブラウザはGoogleChrome
# Optionsオブジェクトを作成
options = Options()
options.add_argument('--headless') # ヘッドレスモードを有効にする
# ChromeのWebDriverオブジェクトを作成
driver = webdriver.Chrome(options=options, executable_path=r"実行するchromedriver.exeのパス")

# Googleのトップページを開く
driver.get(URL)

```
へッドレスモードとは？chromeを自動操作するためにブラウザを立ち上げずに操作することです。へッドレスモードにしなければ、自分でプログラミングした自動操作が、実際にブラウザが立ち上がり見ることができます。

以下の部分を消せば、実際にブラウザが立ち上がり検索するところを見ることができます。
```
options.add_argument('--headless')#へッドレスモード
```

エラー文 chromeDriverを起動した際に、立ち上がってすぐに消えてしまう
==
```python：
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 107
Current browser version is 111.0.5563.111 with binary path C:~~~
```
この現象が発生する原因は、
「Chromeブラウザのバージョンとchromedriver.exeのバージョンが異なっている。」
と記載されています。

バージョン確認とchromedriver.exeのダウンロードを行いましょう。
1.Chromeのバージョン確認
2.Chromeと対応するchromedriver.exeをダウンロード
3.古いchromedriver.exeを交換

1.Chromeのバージョン確認
chromeの右上「：」から設定を開く
左側タブの一番下「Chromeについて」をクリック。
chromeのバージョンを確認します。

「バージョン: 111.0.5563.111（Official Build） （64 ビット）」

2.バージョンの合ったchromeDriverのダウンロード
https://chromedriver.chromium.org/downloads
こちらから「ChromeDriver 111.0.～」バージョン111が一致しているものをダウンローろしうドしましょう

3.古いchromedriver.exeを交換
古いchromedriverを削除もしくは上書きでOKです。

エラー｜'chromedriver.exe' executable needs to be in PATH. (パスの不一致)
==
実行するパスが間違えています。
パスを修正しましょう。

VSCODE左側のエクスプローラーにて、「chromedriver.exe」を右クリックし「パスのコピー」を選択し、パスをVSCODEに貼り付けましょう。



5.seleniumでGoogleから検索キーワード検索する
===
①seleniumから検索テキストボックスの場所を指示。
②検索キーワードを入力し検索します。

①検索テキストボックスの場所を指示
---
googleのトップサイト（'https://www.google.co.jp'）から
検索バーにマウスのカーソルを持っていく。

右クリックし、検証をクリック。

右側にname="q"と記載を確認しましょう。
その場所をpythonに定義させます。

```python：
# 検索テキストボックスの要素をname属性から取得
input_element = driver.find_element_by_name('q')
```

次にぁら

```python：
# 検索テキストボックスに入力されている文字列を消去
input_、ｐこelement.clear
```

```python：
# 検索テキストボックスにキーワードを入力
input_element.send_keys("転職")
# Enterキーを送信
input_element.send_keys(Keys.RETURN))
# 2秒待機
time.sleep(2)
```


もしname="q"が見つからなかったら…
---
何でもいいので検索キーワードを検索し、サイト検索画面に移動してから、
また検索バーにマウスを持っていき、検証画面を開いてみましょう。

右側にname="q"の記載が見つかります。


6.検索結果ページの上位サイトのURLを取得
===

```python：
# 検索テキストボックスにキーワードを入力
input_element.send_keys("転職")
# Enterキーを送信
input_element.send_keys(Keys.RETURN))
# 2秒待機
time.sleep(2)
```

7.キーワードをテキストファイルから読み込み
===
検索するキーワードのリストをテキストデータから読み込みます。

```python：
# '検索キーワードリスト.txt'ファイルを読み込み、リストにする
with open('検索キーワードリスト.txt') as f:
    keywords = [s.rstrip() for in f.readlines()]

```


readlines()関数とは
---
readlines()関数は、テキストファイルから内容を全て読み出します。読み出し方は１行毎になります。

ちなみに
read()関数はファイルから指定サイズを読み出し、
readlins()関数はファイルから1行だけ読み出しをします。

rstrip()関数とは
---
文字列の右側の空白文字を除去します。
空白文字は、スペース、タブ、改行が対象になります。

8.正規表現を使ってドメインを抽出して取得する
===
大手ドメインが入っていないか確認するために、
取得したurlからドメインを取得します。

```python：
for url in urls:
    m = re.search(r'//().*?)/', url)
    # '//〇〇/'に一致する箇所（ドメイン）を抜き出す
    domain = m.group(1) 
    # '//〇〇/'の'〇〇'に一致する箇所を抜き出し、domainに代入
    if 'www.' in domain:
    # ドメインに'www.'が含まれているかチェック
        domain =m.group(4:) 
    # 含まれているなら'www.'を除去
```

9.取得したドメインに大手ドメインが入っていないかチェックします。
===
```python：
if domain in domains: 
        # 各ページのドメインが指定ドメインに含まれているかチェック
        print(f'キーワード「{keyword}」の検索結果には大手ドメインがありましたので除外します。')
        # 含まれているなら警告を出す
        break 
        # １つでも含まれているなら他はチェックする必要がないので関数を終了
```

10.取得したドメインに大手ドメインが入っていないキーワードをリスト化
===
```python：
else:
    ok_keywordlist = []
    ok_keywordlist.append(keyword)
    # 指定ドメインに含まれていないならキーワードをok_keywordlistに追加
```

11.プログラムの関数化
===

```python：
if domain in domains: 
        # 各ページのドメインが指定ドメインに含まれているかチェック
        print(f'キーワード「{keyword}」の検索結果には大手ドメインがありましたので除外します。')
        # 含まれているなら警告を出す
        break 
        # １つでも含まれているなら他はチェックする必要がないので関数を終了
```