LoginSignup
1
3

gspreadを利用してスクレイピングした内容をスプレッドシートに自動入力

Last updated at Posted at 2023-07-05

スクレイピング内容をスプレッドシートに自動で入力する

クラウドソーシングに絶えず投稿されている業務内容に、「指定のWEBサイトの情報を取得し表計算ソフトにデータを入力する」というものがあります。今回行う流れは、このような形になります。

用意するもの

まだインストールしていない方は pipなどを利用して すべてインストールしてください。

ターミナル
$ pip install requests
$ pip install beautifulsoup4
$ pip install google
$ pip install gspread
$ pip install oauth2client

・Python3
すべてのプログラムで動作します。
・Requests
pythonでWebサイトにアクセスするために利用するライブラリです。
・Beautiful Soup 4 (bs4)
WebサイトのHTMLをパースし、要素を取得するライブラリです。
・gspread
pythonからスプレッドシートにアクセスするためのモジュールです。
・oauth2client
スプレッドシートにアクセスする際の認証モジュールです。

1.実際にスクレイピングをする

今回は業務でありそうな内容を考えてみました。
「alibabaで検索して出た商品の商品情報を取得し、スプレッドシートにデータ入力」
という感じで行きたいと思います。
少なからずプログラミングができなければいけないので、できない人はpaizaラーニングの動画を見まくってください。


URLを解析

まずは、Alibabaの検索結果のリンクを解析します。
Alibabaの検索バーに「アイス」と入力し、検索します。

すると、リンクは以下のようになります。
https://japanese.alibaba.com/trade/search?IndexArea=product_en&CatId=&fsb=y&viewtype=&tab=all&SearchScene=&SearchText=%E3%82%A2%E3%82%A4%E3%82%B9
どうやら、 searchText= 以下が検索したワードになっているようです。
詳しくは長くなるのでここでは省略しますが、一般的には日本語をHTML内に表記する際には「URLエンコーディング、デコーディング」が利用されています。今回はWeb上のツールでデコードしてみましょう。

http://webadmin.jp/toolurlencode/
image.png

UTF-8 規格でデコードされていることがわかりました。
では実際に、作業フォルダを作り、pythonファイルに「指定したワードで検索した結果のURL」を生成するプログラムを記述していきます。
image.png

main.py
from urllib.parse import quote

# URLエンコードするワード
keyword = "アイス"

# URLエンコード
encoded_keyword = quote(keyword, encoding='utf-8')

# URL生成
url = "https://japanese.alibaba.com/trade/search?tab=all&searchText=" + encoded_keyword


HTMLを取得しパース

では、検索したいワードからアクセス先のページのURLを生成することができたので、次は実際にアクセス先のHTMLを取得します。
今回は、RequestsとBeautiful Soupを利用します。

main.py
import requests
from bs4 import BeautifulSoup

# URLにアクセスしてHTMLを取得
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

要素から取得したい情報を取得

Webページを開き、F12キーから開発者ツールを開き商品名が隠れているタグを探します。
image.png

商品名が、h2 タグに含まれていることがわかりました。
この要領で、商品名と値段を取得し並べて出力されるコードを記述します。

main.py
for product in soup.find_all("div", class_="list-no-v2-main"):
  title_element = product.find("h2")
  title = title_element["title"]
  price = product.find("span", class_="elements-offer-price-normal__price").text
  print("商品名: "+title)
  print("値段: "+price)

実行結果が以下のようになっていれば成功です。
image.png

2.スプレッドシートに入力

欲しい情報を取得することに成功したので、それをスプレッドシートに自動入力する作業に入ります。
gspreadのセットアップ方法については、以下の記事を御覧ください。
https://qiita.com/akabei/items/0eac37cb852ad476c6b9

セットアップするコード

main.py
import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']

credentials = ServiceAccountCredentials.from_json_keyfile_name('<JSONファイル名>.json', scope)
gc = gspread.authorize(credentials)
wks = gc.open('gspreadサンプル').sheet1

リストを作成し、内容をスプレッドシートに自動入力

main.py
sheet_name = 'alibaba'
worksheet_name = 'test' 
sheet = gc.open(sheet_name).worksheet(worksheet_name)

for product in soup.find_all("div", class_="list-no-v2-main"):
  title_element = product.find("h2")
  title = title_element["title"]
  price = product.find("span", class_="elements-offer-price-normal__price").text
  print("商品名: "+title)
  print("値段: "+price)



  header = ["title", "price"]
  data_list = [header]
  data_list.append([title,price])
  values = [title,price]
  sheet.append_row(values)

タイトルと価格を取得した後、それぞれを表示します。その後、Googleスプレッドシートにデータを追加するための行を作成します。最初に、ヘッダー(列の名前)を追加します。それから、タイトルと価格を含むリストを作成し、データリストに追加します。

実行して、スプレッドシートに自動入力されたら成功です!
image.png

1
3
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
1
3