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 と出ることを想定していました)
これもあわせて教えていただけると嬉しいです.
以上のことで何かアドバイス下さると嬉しいです.
よろしくお願いします.
nowPrice = 1993
oldPrice = 5000
if int(nowPrice) < int(oldPrice):
print "update"
上記のコードは、updateと表示されます。問題を解決する為に、必要最小限のコードにしてみて、部分コードを確認して、想定外の動作をしているコードを特定し、その原因を書籍で調べるとか、検索するとか、このような場所で聞くとかが結構スタンダードなやり方かと思っています。
お教え頂いたように小さい部分ごとに分解して行ったらほぼできました!
メールはできませんでした!
ありがとうございました!
解決されたようですので、自己回答で解決済みにしていただけると助かります。
回答2件
あなたの回答
tips
プレビュー