質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

477閲覧

【AmazonAPI】Pythonで取得した商品情報の結果をcsvに書き込みたい

etherwind

総合スコア28

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/09 09:43

編集2018/10/09 10:20

前提・実現したいこと

AmazonAPIの商品情報をPythonで取得することにしました。
ほしい情報をコマンドプロンプト上に表示するところまではできたのですが、取得結果をexcelファイルへの保存する為のコードの書き方がわかりません。

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

該当のソースコード

test.py
下記はほしい情報をコマンドプロンプト上に表示するところまでのコードです。

# coding=utf8 import bottlenose from bs4 import BeautifulSoup import isbnlist_amazon ACCESS_KEY = "XXXXX" SECRET_ACCESS_KEY = "XXXXX" ASSOCIATE_TAG = "XXXXX-22" amazon = bottlenose.Amazon(ACCESS_KEY, SECRET_ACCESS_KEY, ASSOCIATE_TAG, Region="JP") for isbn in isbnlist_amazon.isbn: response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="ItemAttributes", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") print(soup.title) response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="SalesRank", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") print(soup.salesrank)

  
isbnlist_amazon.py
取得したいisbnが大量にある為、isbnは別ファイルのリストから読み込む方式をとっています。下記はテスト用として3つだけ設定しています。

isbn=[ '488379055X', '4150113521', '4091843999', ]

試したこと

import csv 略 def main(f): writer = csv.writer(f) 略 if __name__ == '__main__': with open('amazon.csv', 'w', newline='', encoding='shift_jis', errors='ignore') as f: main(f)

上記のコードを追記するなど、ネットで調べて出てきた通常のやり方と思われる書き出し方法は全部試したつもりです。
何かしらのエラーが出て止まるか、中身が白紙のエクセルファイルが作成されるところまでしかできませんでした。
コマンドプロンプトの内容をコピペする方法も考えたのですが、結果の行数が膨大になる為、ファイルへの書き出しをなんとかして実装したいと考えています。

試行錯誤の最終段階
ひとまず一番上の「elems = print(soup.title)」の内容をexcelに書き出すところまでやろうとしていました。

# coding=utf8 import csv import bottlenose from bs4 import BeautifulSoup import isbnlist_amazon ACCESS_KEY = "XXXXX" SECRET_ACCESS_KEY = "XXXXX" ASSOCIATE_TAG = "XXXXX-22" amazon = bottlenose.Amazon(ACCESS_KEY, SECRET_ACCESS_KEY, ASSOCIATE_TAG, Region="JP") def main(f): writer = csv.writer(f) for isbn in isbnlist_amazon.isbn: response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="ItemAttributes", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") print(soup.title) response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="SalesRank", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") print(soup.salesrank) if __name__ == '__main__': with open('amazon.csv', 'w', newline='', encoding='shift_jis', errors='ignore') as f: main(f)

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

  • 環境はwindows10、python3.6.7rc1です
  • sleepは完成後に追記する予定です
  • csvじゃなく、txtでも構いません。

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

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

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

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

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

mather

2018/10/09 10:07

main関数はこの一行だけですか?
mather

2018/10/09 10:09 編集

諸々省略されていて状況がわかりません。「ほしい情報をコマンドプロンプト上に表示するところまではできた」という部分のコードを提示してください。test.pyのprint文がそれでしょうか?
etherwind

2018/10/09 10:12 編集

main関数の部分は下記のようにコードを書いていましたが、試行錯誤の途中のものなので質問文には含めていませんでした。 この記述がどこまで的を得た内容なのかもわかりませんm(__)m def main(f): writer = csv.writer(f) for isbn in isbnlist_amazon.isbn: response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="ItemAttributes", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") elems = print(soup.title) for elem in elems: print(elem.getText()) csv_writer.writerows(elem)
etherwind

2018/10/09 10:13

「ほしい情報をコマンドプロンプト上に表示するところまではできた」のことでしたら、「test.py」の内容がそれに当たります。
etherwind

2018/10/09 10:15

ACCESS_KEY = "XXXXX" SECRET_ACCESS_KEY = "XXXXX" ASSOCIATE_TAG = "XXXXX-22" の部分は自分で取得したものを使用しています。
mather

2018/10/09 10:16

main関数の内容はここに書くと読みにくいので、試行錯誤中の内容でも質問に追記してください。
etherwind

2018/10/09 10:21

元の質問文に「試行錯誤の最終段階」という項目を追加しました。ご確認していただき、回答をいただければ幸いです。
guest

回答1

0

ベストアンサー

CSVの書き込みについて調べるとこんな記事がすぐヒットします。以下を読むときの参考にしてください。

PythonでCSVの読み書き

writerow を使えばいいので、次のようになると思います。

def main(f): writer = csv.writer(f) for isbn in isbnlist_amazon.isbn: response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="ItemAttributes", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") title = soup.title response = amazon.ItemLookup(ItemId=isbn, ResponseGroup="SalesRank", SearchIndex="Books", IdType="ISBN") soup = BeautifulSoup(response,"lxml") salesrank = soup.salesrank writer.writerow([title, salesrank])

なお、 bottlenoseのリポジトリの説明にもあるように、BeautifulSoupパーサーの宣言は一度でいいようです。
https://github.com/lionheart/bottlenose#parsing

投稿2018/10/09 10:29

mather

総合スコア6753

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

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

etherwind

2018/10/09 10:36

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問