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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

1573閲覧

python(2.7.10)で,文字を数値に変換できない,commands.getoutputが上手く動作しない

spectrum

総合スコア44

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/02/26 03:02

編集2016/02/26 03:25

pythonの初心者です.(そもそもcとunixのコマンドを少し知っているだけですが)
http://wisdomtrees.net/?p=186
のサイトに従い,アマゾンの商品の価格をスクレイピングしてメールで知らせるロボットを作りたいと思いました.
そこで以下のようなコードを書いて実行しました.

python

1import urllib2 2f = urllib2.urlopen('http://www.amazon.co.jp/gp/offer-listing/4785380322/ref=tmm_hrd_used_olp_sr?ie=UTF8&condition=used&qid=&sr=') 3html = f.read() 4 5import re 6targetCol = re.search(r'olpOfferPrice a-text-bold.*',html) 7matchPrice = re.search(r'\d,\d+',targetCol.group(0)) 8nowPrice = matchPrice.group(0).replace(",","") 9 10print nowPrice 11 12import commands 13oldPrice = commands.getoutput('tail -1 /Users/example/scraping/amazon/priceLog.txt') 14 15print oldPrice 16 17echo = commands.getoutput('echo "now price %s" %nowPrice') 18print echo 19 20mailCmd = 'echo "now price %s" | mail -s "price is changing" example@gmail.com' %nowPrice 21logCmd = 'echo %s >> /Users/example/scraping/amazon/priceLog.txt' %nowPrice 22 23if int(nowPrice) < int(oldPrice): 24 commands.getoutput(mailCmd) 25

これを実行したらエラーが起こりました.

invalid literal for int() for base 10: "nowPrice"

そこでif文以下を消して実行したら

1993 50000 now price %s %nowPrice

とでてきました.
ゆえにnowPriceとoldPriceに数以外の文字は含まれていないと判断しました.
この二つん文字列nowPrice,OldPriceを数に変えたいのですがどうすればいいでしょうか?
また,
now price %s %nowPrice
という文も想定した出力とは異なりました.
(now price 1993 と出ることを想定していました)
これもあわせて教えていただけると嬉しいです.

以上のことで何かアドバイス下さると嬉しいです.
よろしくお願いします.

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

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

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

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

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

t_obara

2016/02/26 03:30

nowPrice = 1993 oldPrice = 5000 if int(nowPrice) < int(oldPrice): print "update" 上記のコードは、updateと表示されます。問題を解決する為に、必要最小限のコードにしてみて、部分コードを確認して、想定外の動作をしているコードを特定し、その原因を書籍で調べるとか、検索するとか、このような場所で聞くとかが結構スタンダードなやり方かと思っています。
spectrum

2016/02/26 04:02

お教え頂いたように小さい部分ごとに分解して行ったらほぼできました! メールはできませんでした! ありがとうございました!
argius

2016/02/26 11:55

解決されたようですので、自己回答で解決済みにしていただけると助かります。
guest

回答2

0

自己解決

tomohiro_obaraさん、アドバイスありがとうございました

以下のようになりました

import urllib2 f = urllib2.urlopen('http://www.amazon.co.jp/gp/offer-listing/4785380322/ref=tmm_hrd_used_olp_sr?ie=UTF8&condition=used&qid=&sr=') html = f.read() import re targetCol = re.search(r'olpOfferPrice a-text-bold.*',html) matchPrice = re.search(r'\d,\d+',targetCol.group(0)) nowPrice = matchPrice.group(0).replace(",","") import commands oldPrice = commands.getoutput('tail -1 /Users/example/scraping/amazon/priceLog.txt') echo1 = commands.getoutput('echo "now price gets cheaper. %s yen"' %nowPrice) echo2 = commands.getoutput('echo "the price is not changing. %s yen"' %nowPrice) echo3 = commands.getoutput('echo "now price gets higher. %s yen"' %nowPrice) write = commands.getoutput('echo %s >> /Users/example/scraping/amazon/priceLog.txt'%nowPrice ) if int(nowPrice) < int(oldPrice): print echo1 print write elif int(nowPrice) == int(oldPrice): print echo2 else: print echo3 print write

投稿2016/02/27 04:47

編集2016/02/27 07:41
spectrum

総合スコア44

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

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

0

tomohiro_obaraさん、アドバイスありがとうございました

投稿2016/02/27 04:45

spectrum

総合スコア44

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問