Google Colaboratory でスクレイピングができないかやってみた

クラウドワークスの案件やってたときに、「クラウド」でスクレイピングやりたい！とやたら要望されたんです。しかも自動で。。。（汗

そんな素敵な環境があれば僕も欲しいですけどね。
自動ってなると何かと上手く行かないと思うけど、手動ならGoogle Colaboratoryでできないかなと思って実験してみました。

###まずはこちらから
https://colab.research.google.com/
当然ですがGoogleアカウントないと使えませんよ

こちらを参考にしています
https://obgynai.com/google-colaboratory/

###ノートブックを新規作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/c4fbc3ae-151e-6d31-019b-db8823c0d1c0.png)

###空白のノートブックが出来上がる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/9ad1ae64-0c9f-c20e-8aab-0ae27b38ab68.png)

###BeautifulSoupを入れてみる
```hoge.py
!pip install beautifulsoup4
```
pipの前に「！」がいる。
実行ボタンをポチっとする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/92e89285-b45f-1502-ef01-a69c815b7fa2.png)

もうあるよ！って言われた。以前入れてたみたい。



###とりあえずサンプルをググってコピペ実行してみた
何でもいいので動くのか検証してみた

```WebCrawler.py
from bs4 import BeautifulSoup
from urllib import request

url = 'https://www.atmarkit.co.jp/ait/subtop/di/'
response = request.urlopen(url)
soup = BeautifulSoup(response)
response.close()

print(soup)
```
実行ボタンをポチっとする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/e874465d-d7a7-8bf3-bed3-45cf4bf0278c.png)

凄い！！簡単にできました。

###selenium入れてみる
どうやらseleniumも実行できるようです。

参考記事：https://enjoy-a-lot.com/google-colaboratory-selenium/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/28d5e0dd-4fe8-04ea-3efa-b5dd5d397e43.png)

###!pip freezeでインストール済み確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/69155dab-5460-e031-de73-acd6fb42f758.png)

###chromium-chromedriverをインストール

```hoge.py
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/b5e00d2a-0db0-f0a8-4feb-37281415da2e.png)

またまたコピペで実行

```hoge.py

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome('chromedriver',options=options)
driver.get("https://enjoy-a-lot.com/")
title = driver.find_element_by_class_name('logo-header')
print(title.text)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/e3292056-bf84-ccaf-d8e7-b3461f2a61cd.png)

成功したっぽい

###もう少し書いてみた

```hoge.py
from selenium import webdriver
from bs4 import BeautifulSoup

#詳細ページからコメントを抜き出す
def shop(html):
    soup = BeautifulSoup(html, 'lxml')
    comment=soup.find_all("div", class_="comment")[0].get_text()
    print(comment)

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome('chromedriver',options=options)

url="https://shop/kinki/?p=2"

driver.get(url)

html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, 'lxml')

results = soup.find_all("h2", class_="_shop_name")

# 結果を出力

for result in results:

    txt = result.findAll("a")[0].get_text()
    href= result.findAll("a")[0].get('href')

    print(txt+','+href)
    

    #ショップ別のページへ移動
    surl='https://'+href
    driver.get(surl)
    html = driver.page_source.encode('utf-8')

    #ショップの詳細情報を抜き出し
    shop(html)

driver.close()
driver.quit()

```
###スプレットシートに書き出してみる
Colaboratoryからスプレットシートに書き出しできたら素敵やん！
ということで、、、、

まず、スプレットシートを操作するために準備を行う。
実行すると認証コードを入力するように言われるので、表示されるURLをクリックして認証を行い、コードを取得して貼り付ける。
1日1回は認証にしないとだめなのかも。。。

```hoge.py
!pip install --upgrade -q gspread

from google.colab import auth
auth.authenticate_user()

import gspread
from oauth2client.client import GoogleCredentials

gc = gspread.authorize(GoogleCredentials.get_application_default())
```

そのあとは、お決まりのサンプルをコピペしてテスト
先にスプレットシートを作成しておいて、そこに書き出す
シート名ではなく、sheet1・sheet2と指定するっぽい

```hoge.py
import random

# 出力先のシートを作る
output_sheet_name = 'site'
worksheet = gc.open(output_sheet_name).sheet1

# 出力範囲を指定する
cell_list = worksheet.range('A1:C2')

# 各セルに出力する値の設定
for cell in cell_list:
  cell.value = random.randint(1, 10)

# シートにデータを出力する
worksheet.update_cells(cell_list)

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/c8cbe13b-a674-dc10-847e-0d40f979052d.png)

###BeautifulSoupの書き方参考


https://qiita.com/Chanmoro/items/db51658b073acddea4ac


https://gammasoft.jp/blog/difference-find-and-select-in-beautiful-soup-of-python/