前提・実現したいこと
Pythonにてamazonマーケットプレイスの古書の価格監視を行いたいです
amazonマーケットプレイスの商品一覧URLを入力し、
入力されたURLにアクセスし、価格を取得しデータベースに格納し、
価格が下がっていたらメールにて通知するシステムを作っています
そのためにBeautihulSoupにてタグの内容を取得し、整形したあと、
データベースに渡すコードを書いているのですが、
同じコードのプログラムを実行しても価格が取得できる時とエラーが出る時があります
(エラーが出る時の方が多いです)
発生している問題・エラーメッセージ
IndexError: list index out of range
該当のソースコード
Python3
1 2from bs4 import BeautifulSoup #html整形 3import requests #URL取得 4import re #正規表現 5 6def check_price(ama_url): 7 ama = requests.get(ama_url) 8 #URLにアクセス 9 ama_html = BeautifulSoup(ama.text,features="lxml") 10 select_price = ama_html.select("span.a-color-price") 11 if not select_price: 12 select_price = ama_html.select("a-color-base") 13 #価格のタグを取得…実行タイミングによって取得可否が異なるのはなぜ? 14 15 pattern = r'\d*,?\d*,?\d*\d' 16 #正規表現\d = 数字 17 #* = 直前の文字の0回以上の繰り返しとマッチ 18 #? = 直前の文字の0か1回の繰り返しとマッチ 19 #パターンの最初にrをつけることでバックスラッシュをバックスラッシュとして使えるようになる 20 regex = re.compile(pattern) 21 #検索のパターンを指定 22 23 matches = re.findall(regex, select_price[0].text) 24 #指定したパターンで検索 25 price = matches[0].replace(',','') 26 #int型で扱うために、,などをreplaceメソッドで取り除いている, 27 28 return price
### 試したこと 本のタイトルや著者名も同様に取得したいため、 "title" や ".a-section.a-spacing-mini" など、他のタグでも同様に試行しているのですが、 やはり取得できる時とできない時があります ただし、"title"で取得を試みた場合には、 実行時、取得できなければ ""と空白のリストが返ってくるのですが、 .a-section.a-spacing-mini" の場合は、 IndexError: list index out of range と、価格のサイト同様のエラーが出ます ### 補足情報(FW/ツールのバージョンなど) 環境ですが、 Python3.7.1 Mac Os Shierra(10.12.6)です
回答1件
あなたの回答
tips
プレビュー