Python vs Octoparse！初心者向きのスクレイピング方法はどっち？

元記事：https://www.octoparse.jp/blog/web-scraping-using-python-vs-web-scraping-tool/

[Webスクレイピング](https://www.octoparse.jp/blog/web-scraping-introduction/)は、Webサイトからデータを収集するために広く使用される手法になりました。人々は、Webスクレイピングを行うためにさまざまな方法を利用しています。一般的に、これらはコーディングと[ツール導入](https://www.octoparse.jp/blog/the-10-best-web-scraping-tools/)の2派に分かれています。この記事では、これら2つの方法を使用してTwitterをスクレイピングしてみます。



#PythonでTwitterをスクレイピングする

PythonでTwitterをスクレイピングするには、まずこのリンクからTwitter APIの利用申請が必要となります。APIを申請すると、API key、API secret key、Access token、Access token secretの4行のコードを取得できます。
![Twitter APIの利用申請.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/f571f2b5-0295-90ac-bac5-a2efc0d57ff8.png)


APIの準備ができたので、Twitterクローラーを作成し始めます。クローラーを構築するには、[json](https://www.w3schools.com/python/python_json.asp)と[tweepy](https://www.tweepy.org/)の2つのライブラリを使います。JSONとは、構造化されたデータを表現するための記法です。Tweepyは、Twitter APIにアクセスするためのパッケージです。 
![Tweepy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/33df06af-2355-3537-7078-c85c55f441f6.png)

 
Streamは、ツイートの実行と抽出に役立ちます。OAuthHandlerは、キーとトークンをTwitterに送信するのに役立ちます。StreamListenerは、各ツイートから必要なフィールドを変更するのに役立ちます。

次に、取得したTwitterで発行したキーとトークンを入れます。

![キーとトークンを入れる1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/d2d6c9ea-8792-ae25-7aa7-ff4e2747b1ea.png)


ここでは、StreamListenerを継承するクラスを作成して、Twitterから取得するフィールドの種類を変更します。 ツイート、位置、ユーザー名、ユーザーID、フォロワー数、いいね、タイムゾーンなどの情報を収集できます。ツイート、ユーザー名、タイムゾーンなどの一部の情報には、他の言語の単語で表示する可能性があります。したがって、デフォルトのUnicode文字コードではなく、UTF-8などの別の文字コードの使用を検討する必要があります。
![取得するフィールド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/ce577764-a4f5-b829-bcc0-666f66f96693.png)


それから、OAuthHandlerを使用して、前回同様、キーとトークンを入れます。

![キーとトークンを入れる2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/525919d9-77bf-d637-f267-ad506b1dc075.png)

それで、keywordsにます。ここでは「Big data」に関連するすべてのツイートを検索し、Streamで抽出を開始します。

![検索ワードを入れ抽出する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/b9e31ef9-1ac6-56dd-3432-e963f58e2f38.png)

各行のデータは、1つのツイートからの情報です。異なるフィールドは、2つのセミコロン「;」で区切られています。最初のフィールドはユーザー名、2番目のフィールドは位置、最後のフィールドはツイートです。データをスプレッドシートに書き込み、区切り文字を「;;」に設定してフィールドを区切ることができます。または、pandas、numpy、reなどの他のライブラリを適用して、データをさらに処理することもできます。



#OctoparseでTwitterをスクレイピングする

Pythonでのスクレイピングとは異なり、APIの申請から始める必要はありません。検索キーワードを[Octoparse](https://www.octoparse.jp/)に入力するだけで済みます。Octoparseのソフトには数十種類のあらかじめ作成された[テンプレート](https://www.octoparse.jp/blog/a-revolutionary-web-scraping-software-to-boost-your-business-easier/)があり、パラメータ（WebサイトのURL、検索キーワードなど）を入力するだけで、データが抽出されてきます。

**1.ホーム画面から「タスクテンプレート」の下にある「 +タスク」を選択します。**
![templet mode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/923f4973-b4e2-c1b5-3b9b-815bde5dc204.png)


**2.Twitterのテンプレートを選択し、「今すぐ使う」をクリックします。**
![twitter templet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/3cfda10f-09e3-38da-798f-00fe860f3a0f.png)


**3.検索キーワードを入力し、テンプレートを保存して実行します。**
![keyword.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/03f72a37-5364-c838-8519-5a73037fdbd4.png)


下記は抽出されたデータのサンプルです。
![data sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/b450e6d5-6a94-05a0-1585-45b0294734cb.png)
 

 

 
#まとめ
上記のデモに基づいて、PythonによるコーディングとOctoparseのようなツールの長所と短所をまとめます。

##1.学習コスト
Octoparseより、Pythonのほうは学習コストが明らかに高いです。Pythonでクローラーを構築するには、さまざまなライブラリとコーディング手法に精通しているだけでなく、Web構造を十分に理解し、スクレイピング防止手法を認識する必要があります。その一方、Octoparseでは、開発者はすでにそれらの状況を考慮しており、ユーザーは数回クリックするだけですべてのデータを抽出できます。

 

##2.迅速な構築
上記のデモから見ると、どちらの方法も簡単で使いやすいようです。ただし、最も時間のかかるプロセスはクローラーの構築ではなく、Webサイトへの初期分析です。異なるWebサイトは、異なる開発方法とスクレイピング防止技術を適用します。コーディングしてデータを取得することを選択した場合、Webサイトを分析するためにより多くの時間が必要になります。その一方、Octoparseの場合、Webサイトを分析しなくてもデータを簡単に入手できます。

 

##3.柔軟性
PythonはOctoparseよりも優れた柔軟性を備えています。一部のコードを変更するだけで、クローラーの動作を操作できます。また、いくつかの強力なライブラリまたはAPIをインポートして、数行のコードでデータを取得することもできます。CaptchaやreCaptchaなど、最も難しいアンチスクレイピングテクニックの一部でさえ、Pythonを使用した深層学習方法で解決できる可能性があります。

 
正直に言うと、PythonとOctoparseにはそれぞれ長所があります。Octoparseはコーディングスキルのない人に適していますが、Pythonは専門家に大きな柔軟性を提供できます。自身の状況によって適切な方法を選びましょう。