🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

3390閲覧

seleniumでスクレイピングしたデータをgoogle spread sheetに文字ではなくデータとして出力したい

toshi_worldtrip

総合スコア3

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/02/08 13:48

前提・実現したいこと

seleniumで取得したデータをgoogle spread sheetにデータとして出力したい

発生している問題・エラーメッセージ

apple

該当のソースコード

Python

1from selenium import webdriver 2from bs4 import BeautifulSoup 3import gspread 4from selenium import webdriver 5from oauth2client.service_account import ServiceAccountCredentials 6 7driver = webdriver.Chrome(executable_path=r"C:xxx\chromedriver.exe") #ブラウザの立ち上げ 8driver.get("https://xxx") #アクセスする 9 10apple = driver.find_element_by_xpath("xxx") 11print(apple.text) 12 13scope = ['https://spreadsheets.google.com/feeds', 14 'https://www.googleapis.com/auth/drive'] 15 16#jsonファイルを指定 17credentials = ServiceAccountCredentials.from_json_keyfile_name('xxx.json', scope) 18 19# 認証 20gc = gspread.authorize(credentials) 21 22# 読み込むスプレッドシートをファイル名で指定 23target_book = gc.open('xxx') 24 25# 読み込むシートをシート名で指定 26target_sheet = target_book.worksheet('xxx') 27 28#対象のセルに文字列を書き込み 29target_sheet.update_acell('A2', 'apple')

試したこと

target_sheet.update_acell('A2', 'print(apple.text)')
等色々と試してみましたが、セルに入力されるのはappleという文字です。

seleniumで取得したappleが参照しているデータを表示したいのですが、無理なのでしょうか?
appleが指定している情報を入力したいにも関わらず、appleという文字自体が入力されてしまうのを改善したいです。
コードを1つ1つ確認しましたが、最後の行以外は問題なく進行しました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

errormaker74

2021/02/08 15:10

``` target_sheet.update_acell('A2', 'apple') ``` を ``` target_sheet.update_acell('A2', apple.text) ``` にしたいということですか?
toshi_worldtrip

2021/02/08 15:22

そういうことです。ちなみに、その通りに入力すると以下のエラーが出ます。 、、、 File "<stdin>", line 1, in <module> File "xxx\gspread\models.py", line 850, in update_acell return self.update_cell(*(a1_to_rowcol(label)), value=value) File "xxx\gspread\models.py", line 865, in update_cell data = self.spreadsheet.values_update( File "xxx\gspread\models.py", line 235, in values_update r = self.client.request('put', url, params=params, json=body) File "xxx\gspread\client.py", line 61, in request response = getattr(self.session, method)( File "xxx\requests\sessions.py", line 602, in put return self.request('PUT', url, data=data, **kwargs) File "C:xxx\requests.py", line 481, in request response = super(AuthorizedSession, self).request( File "xxx\requests\sessions.py", line 528, in request prep = self.prepare_request(req) File "xxx\requests\sessions.py", line 456, in prepare_request p.prepare( File "xxx\requests\models.py", line 319, in prepare self.prepare_body(data, files, json) File "xxx\requests\models.py", line 469, in prepare_body body = complexjson.dumps(json) File "xxx\Python39\lib\json\__init__.py", line 231, in dumps return _default_encoder.encode(obj) File "xxx\Python39\lib\json\encoder.py", line 199, in encode chunks = self.iterencode(o, _one_shot=True) File "xxx\Python39\lib\json\encoder.py", line 257, in iterencode return _iterencode(o, 0) File "xxx\Python39\lib\json\encoder.py", line 179, in default raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type WebElement is not JSON serializable 、、、 number = 9 target_sheet.update_acell('A2', number) のように簡単に定義すると上手くいくのですが、このように定義してみても上手くいきませんでした。 p = print(apple) target_sheet.update_acell('A2', p)
toshi_worldtrip

2021/02/08 15:27

import json from datetime import date, datetime # date, datetimeの変換関数 def json_serial(obj): # 日付型の場合には、文字列に変換します if isinstance(obj, (datetime, date)): return obj.isoformat() # 上記以外はサポート対象外. raise TypeError ("Type %s not serializable" % type(obj)) # datetime型を含むdict item = { "dt" : datetime.now() } # default引数を指定して、JSON文字列を生成します jsonstr = json.dumps(item, default=json_serial) print(jsonstr) # '{"dt": "2017-07-05T17:01:06.112224"}' こちらのコードを追加してJSONの変換を試みましたが上手くいきませんでした。
errormaker74

2021/02/08 17:15

念のため確認ですが、誤って下記のようにしていませんか? ``` target_sheet.update_acell('A2', apple) ``` 正しくは`apple.text`です。 ``` target_sheet.update_acell('A2', apple.text) ``` 私の環境では普通のサイトをスクレイピングしても問題なくスプレッドシートに記載できました。 もし差し支えなければどのようなどのサイトかURLを質問文に追記できますか? もしくは下記のようにして`apple.text`に何が入っているか追記できますか? ``` print(apple.text) ```
toshi_worldtrip

2021/02/09 00:38

申し訳ございません。 初歩的なミスで仰るとおりにしてみたら解決しました。 ありがとうございます。
guest

回答1

0

自己解決

引数.textを付け忘れていた

投稿2021/02/09 01:09

toshi_worldtrip

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問