クラウドワークスの案件やってたときに、「クラウド」でスクレイピングやりたい!とやたら要望されたんです。しかも自動で。。。(汗
そんな素敵な環境があれば僕も欲しいですけどね。
自動ってなると何かと上手く行かないと思うけど、手動ならGoogle Colaboratoryでできないかなと思って実験してみました。
###まずはこちらから
https://colab.research.google.com/
当然ですがGoogleアカウントないと使えませんよ
こちらを参考にしています
https://obgynai.com/google-colaboratory/
###BeautifulSoupを入れてみる
!pip install beautifulsoup4
もうあるよ!って言われた。以前入れてたみたい。
###とりあえずサンプルをググってコピペ実行してみた
何でもいいので動くのか検証してみた
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)
凄い!!簡単にできました。
###selenium入れてみる
どうやらseleniumも実行できるようです。
参考記事:https://enjoy-a-lot.com/google-colaboratory-selenium/
###chromium-chromedriverをインストール
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
またまたコピペで実行
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)
成功したっぽい
###もう少し書いてみた
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回は認証にしないとだめなのかも。。。
!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と指定するっぽい
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)
###BeautifulSoupの書き方参考