2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-03-16

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

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

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

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

###ノートブックを新規作成する
image.png

###空白のノートブックが出来上がる
image.png

###BeautifulSoupを入れてみる

hoge.py
!pip install beautifulsoup4

pipの前に「!」がいる。
実行ボタンをポチっとする
image.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

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

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

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

image.png

###!pip freezeでインストール済み確認
image.png

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

hoge.py
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin

image.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

成功したっぽい

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

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

###BeautifulSoupの書き方参考

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?