pythonでスクレイピングするための準備 【チョコレート味】


# 概要

Windowsを買って初めて起動したところからスタートしても最短15分でセットアップ完了します。
基本的にSeleniumをPythonで操作してスクレイピングする前提です。
高速セットアップに主軸を置いているので、【チョコレート味】だけど【辛口】です。

# Chocolatey インストール

まず、Chocolateyが無いと面倒なことが多すぎますのでインストールします。
既にインストールしてある場合は読み飛ばしてください。

powershell を管理者権限で起動します。
インストールする前に、`choco`と実行してみましょう。

```posh:Administrator's-Powershell
$> choco
choco : 用語 'choco' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパ
スが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:1
+ choco
+ ~~~
    + CategoryInfo          : ObjectNotFound: (choco:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
```

インストールされていないことが確認できます。

次に以下のインストールコマンドを実行します。

```posh:Administrator's-Powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```

Note : インストールコマンドが新しくなっていないか「[Installing Chocolatey](https://chocolatey.org/install#individual)」で探しましょう。

powershellを管理者権限で開きなおします。
もう一度`choco`と実行すると、バージョンとヘルプメニューの出し方が表示されます。

```posh:Administrator's-Powershell
$> choco
Chocolatey v0.10.15
Please run 'choco -?' or 'choco <command> -?' for help menu.
```

ここまで来たら、次に進みます。

# Visual Studio Code インストール

powershellを管理者権限で起動します。
以下のコマンドを実行します。

```posh:Administrator's-Powershell
choco install vscode
```

そのまま、`refreshenv`、`code`と２つコマンドを実行すれば、vscodeが開きます。

# Visual Studio Code Extension Pack インストール

以下の２つの[拡張機能](https://marketplace.visualstudio.com/VSCode)をインストールします。

オススメ拡張機能はここでは触れません。

- [Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja)
  - UIを日本語で表示するために使います。
- [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python)
  - Python をデバッグするためにこれは必須です。

## 推奨拡張機能設定

`.vscode/extentions.json`を以下のように作成すれば、インストールの手間はだいぶ省けます。
そのうえ、Githubでの共有などもしやすいです。

```json-doc:.vscode/extentions.json
{
	// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
	// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp

	// List of extensions which should be recommended for users of this workspace.
	"recommendations": [
		"coenraads.bracket-pair-colorizer-2",
		"github.vscode-pull-request-github",
		"ms-python.python",
		"mechatroner.rainbow-csv",
	],
	// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
	"unwantedRecommendations": [

	]
}
```

# Miniconda3 インストール

powershellを管理者権限で起動する
以下のコマンドを実行します。

```posh:Administrator's-Powershell
choco install miniconda3
```

スタートメニューに
Anaconda Powershell Prompt (miniconda3)
があれば成功です。

# 仮想環境作成

スタートメニューに
Anaconda Powershell Prompt (miniconda3)
があるはずなので起動します。
以下のコマンドを実行して仮想環境を作成します。

```posh:Anaconda-Powershell-Prompt-(miniconda3)
conda create --name scraping-env-name
```

Note : コマンド詳細は[コマンドリファレンスを参照](https://docs.conda.io/projects/conda/en/latest/commands.html)
Note : scraping-env-nameはプレースホルダーです。

この時点で、拡張子が`.py`のファイルをVSCodeにて開くと、今作った仮想環境を選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/9f1c5f82-25c4-85bc-3156-6e58ee2d71b3.png)

# 仮想環境のアクティベーション

```posh:Anaconda-Powershell-Prompt-(miniconda3)
conda activate scraping-env-name
```

Note : コマンド詳細は[コマンドリファレンスを参照](https://docs.conda.io/projects/conda/en/latest/commands.html)

# conda-forgeをチャンネルとして追加

例えば、同じ`numpy`というライブラリでも、どこのリポジトリチャンネルで公開されている`numpy`を使用するのか？ということが問題になってきます。
既定では、anacondaのチャンネルからになっていますが、私はconda-forgeが好きなので、これに切り替えます。

リポジトリチャンネルに[conda-forge](https://conda-forge.org/)を追加

```posh:Anaconda-Powershell-Prompt-(miniconda3)
conda config --add channels conda-forge
conda config --set channel_priority strict
```

# ライブラリパッケージのインストール

開発に使用したい仮想環境をアクティベートした状態で以下のコマンドを実行します。
何も入っていない仮想環境にライブラリがインストールされます。

```posh:Anaconda-Powershell-Prompt-(miniconda3)
conda install python lxml beautifulsoup4 selenium pylint yapf
```

- python
  - これがないと何も始まりません。Pythonです。3系がインストールされます。
- lxml
  - xml や html を扱うためのパーサーライブラリです。
- beautifulsoup4
  - [beautifulsoup](https://www.crummy.com/software/BeautifulSoup/)はパーサーをラップして使いやすくするラッパーライブラリです。
  - `Alice in Wonderland`にて`Mock Turtle`というキャラクターが歌う
  - `Turtle Soup`に`beautiful Soup!`が頻出するらしいです。
- selenium
  - [Selenium](https://www.selenium.dev/)はブラウザのオートメーションツールであり、それを扱うための同一名称のライブラリです。
- pylint
  - VScodeのリンターに注意されるので、事前に入れておきます。
  - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/a417684c-abaa-9b45-ea38-969218c50001.png)
- yapf
  - VScodeの右クリックメニューから「ドキュメントのフォーマット」を行うと注意されるので、事前に入れておきます。
  - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/1bae9d3e-7702-5457-4eca-a7733aead2f4.png)
  - 「`autopep8`っていうフォーマッターが入ってないけど、入れとく？」とか聞いてきます。
  - しかし、Google大好き少年なので`yapf`を入れておきます。
  - [これで決まり！最強自動コード整形ツール3選！](https://www.kimoton.com/entry/20181223/1545540702)

## ライブラリのインストールは順不同でも

ちなみにライブラリをインストールする順番はなんでもいいです。
ライブラリの依存関係は自動で解決してくれますので安心しましょう。

# WebDriver のインストール

Seleniumはブラウザを自動操作してくれます。
Chromeを自動操作したいので、Chromeドライバーをインストールします。
この時、Google Chrome をインストールする必要はありません。

```posh:Administrator's-Powershell
choco install selenium-chrome-driver
```

※その他のWebDriver の場合には、こちらの[クイックリファレンス](https://www.selenium.dev/documentation/ja/webdriver/driver_requirements/#quick-reference)をご覧ください。

# ワークスペース設定

ここまでの設定を一通り行うと、ワークスペース設定が以下のようになっていると思います。

```json-doc:.vscode/settings.json
{
    "python.pythonPath": "C:\\tools\\miniconda3\\envs\\scraping-env-name\\python.exe",
    "python.formatting.provider": "yapf"
}
```

先ほどフォーマッター`yapf`をインストールしました。
もし後から`autopep8`や`black`に切り替えたい場合は、こちらで切り替えができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/8be50850-e93e-92ec-7bf2-2f743c2d9114.png)

# minicondaのpath

chocolateyを使用してminiconda3をインストールすると、プログラム実行時に

```text
conda: The term 'conda' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
```

というメッセージが表示されます。
このままでも動作に支障はないのですが、気になるのでちゃんと設定します。

先ほどの設定ファイル`.vscode/settings.json`に`"python.condaPath": "C:\\tools\\miniconda3\\Scripts"`を追加して、

```json-doc:.vscode/settings.json
{
    "python.pythonPath": "C:\\tools\\miniconda3\\envs\\scraping-env-name\\python.exe",
    "python.formatting.provider": "yapf",
    "python.condaPath": "C:\\tools\\miniconda3\\Scripts"
}
```

となりました。

# 動作確認

とりあえず、こんな感じのコードがを書きます。
`F5`キーを押してエラーメッセージがでなければ準備完了です。

```py:test001.py
import lxml
from bs4 import BeautifulSoup

from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.keys import Keys

options = ChromeOptions()
# options.add_argument('--headless')

driver = Chrome(options=options)
```

## ファイアウォール設定

初めてPythonプログラムを実行したとき、ファイアウォールによってPythonがブロックされます。
あらかじめ、現在のインターネットへの接続設定を確認しておき、プライベートかパブリックか該当するほうを選択します。
選択したら「アクセスを許可する」をクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/0a0fd7b2-4f09-ed59-50c2-e6f8ab752ca3.png)
そうすると、ファイアウォールルールが作成されるので、
この仮想環境のPythonはブロックされず正常に通信できるようになります。

もし間違えても、`wf.msc`で確認・変更することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/d4bcf72b-f9aa-9f3a-ea87-7624053fc206.png)

または「許可されたアプリ」からもできます。
「コントロール パネル\すべてのコントロール パネル項目\Windows Defender ファイアウォール\許可されたアプリ」![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/90f6cc3f-2045-0dc1-6f25-a1e7abbfa7cc.png)

それか、`Get-NetFirewallRule`とか`New-NetFirewallRule`、`Set-NetFirewallRule`を駆使すればいいと思います。

# それでは

ステキなスクレイピングマスターを目指しましょう

**Excelsior!**

# 参考資料

https://docs.conda.io/projects/conda/en/latest/commands.html