beautiful soupで更新チェック
iPad mini 5が出るような噂
もしかしたらmini 4が安く出るんではないかと
整備品の値段をappleのサイトでいちいち調べてた
名前と値段のリストをとってくるスクリプトを書いてみた
PythonのBeautiful Soup4をつかう
スクレイピングについて参考にしたのはこの本
PythonによるWebスクレイピング 第2版
(Amazonのページに飛びます)
まずiPadの正規整備品のサイトから
"refurbished-category-grid-no-js"のタグだけとってきて
その中に含まれる"li"のタグでfor文を回して
タグに含まれる製品名と価格を表示する
これだけだけど久々に書こうとしたら忘れてた
from urllib.request import urlopen from bs4 import BeautifulSoup import datetime today = datetime.date.today() todaydetail = datetime.datetime.today() # date time print('----------------------------------') print("Today's refurbished iPad") print(todaydetail) print('----------------------------------') url = "https://www.apple.com/jp/shop/refurbished/ipad" html = urlopen(url).read() bsObj = BeautifulSoup(html, 'lxml') refurbishedipad = bsObj.find("div", {"class":"refurbished-category-grid-no-js"}) for i in refurbishedipad.find_all("li"): ipad_name = i.find("a").get_text() ipad_price = i.find("div", {"class":"as-price-currentprice as-producttile-currentprice"}).get_text() ipad_price = ipad_price.replace(" ", "").replace("\n", "") print(ipad_name + " " + ipad_price)
実行するとこんな感じ
---------------------------------- Today's refurbished iPad 2019-03-13 15:55:05.999841 ---------------------------------- 9.7インチiPad Pro Wi-Fi 32GB - スペースグレイ [整備済製品] ¥50,800(税別) 9.7インチiPad Pro Wi-Fi 32GB - ゴールド [整備済製品] ¥50,800(税別) 9.7インチiPad Pro Wi-Fi 32GB - ローズゴールド [整備済製品] ¥50,800(税別) 10.5インチiPad Pro Wi-Fi 256GB - シルバー [整備済製品] ¥73,800(税別) 10.5インチiPad Pro Wi-Fi 256GB - ゴールド [整備済製品] ¥73,800(税別) 10.5インチiPad Pro Wi-Fi 256GB - ローズゴールド [整備済製品] ¥73,800(税別) 12.9インチiPad Pro Wi-Fi 64GB - ゴールド [整備済製品] ¥73,800(税別) 12.9インチiPad Pro Wi-Fi 256GB - ゴールド [整備済製品] ¥87,800(税別)
atomで実行すると文字化けする
power shellで大丈夫だから
atomの問題っぽい
Atom-runnerの日本語文字化け解決方法 | げーまーこんぶの戯言
process.env.PYTHONIOENCODING = "utf-8";
追加したけど改善してない。。。
14 March 2019追記
PCの再起動とかしてたら文字化けしなくなった
PythonだけでなくRも大丈夫
エラーコードは相変わらず文字化けする
28 November 2020 追記
Pythonのオブジェクト指向プログラミングを完全理解 - Qiita
こちらのサイトを参考に少し書き換えた
スクレイピングするclassを新たに作成して複数のページをスクレイピングできるようにした。
関数のままでも良かったのだが、勉強を兼ねて書き換え。
from urllib.request import urlopen from bs4 import BeautifulSoup import datetime class HtmlScraping: def __init__(self, url): self.url = url def url_scraping(self): html = urlopen(self.url).read() bs_Obj = BeautifulSoup(html, 'html.parser') refurbished_product = bs_Obj.find("div", {"class":"refurbished-category-grid-no-js"}) for i in refurbished_product.find_all("li"): product_name = i.find("a").get_text().replace("\xa0", "") product_price = i.find("div", {"class":"as-price-currentprice as-producttile-currentprice"}).get_text() product_price = product_price.replace(" ", "").replace("\n", "") print(product_name + " " + product_price) if __name__ == '__main__': today = datetime.date.today() todaydetail = datetime.datetime.today() url_refurbished_products = {"Recommended_Products":"https://www.apple.com/jp/shop/refurbished", "iPad":"https://www.apple.com/jp/shop/refurbished/ipad", "mac":"https://www.apple.com/jp/shop/refurbished/mac"} for i in url_refurbished_products: print('----------------------------------') print("Today's refurbished " + i) print(todaydetail) print('----------------------------------') url = HtmlScraping(url_refurbished_products[i]) url.url_scraping()
追記ここまで