Day 27 任天堂eShop游戏价格爬取

今天的影片内容为爬取任天堂线上商城游戏的售价後,再转换成新台币进行价格比对
是一个我个人觉得蛮有趣的主题呦~/images/emoticon/emoticon37.gif

P.S.录这部影片的时候有点感冒,声音沙哑沙哑的,还请大家见谅

以下为影片中有使用到的程序码

#香港任天堂网站
import requests, bs4

#爬取官网售价
url_1 = "https://store.nintendo.com.hk/70010000009373"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
htmlfile_1 = requests.get(url_1, headers = headers)
objsoup_1 = bs4.BeautifulSoup(htmlfile_1.text, 'lxml')

price_1 = objsoup_1.find('span', class_ = 'price') #HKD 429.00
price_2 = price_1.text[4:] #429.00
price_3 = float(price_2) #转成浮点数
print(price_3) 

#汇率
url_2 = "https://www.google.com/search?q=%E6%B8%AF%E5%B9%A3%E5%8F%B0%E5%B9%A3&oq=%E6%B8%AF%E5%B9%A3&aqs=chrome.0.69i59j69i57j0i433i512j0i512l7.7520j1j7&sourceid=chrome&ie=UTF-8"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
htmlfile_2 = requests.get(url_2, headers = headers)
objsoup_2 = bs4.BeautifulSoup(htmlfile_2.text, 'lxml')

exchange_rate_1 = objsoup_2.find('span', class_ = 'DFlfde SwHCTb')
exchange_rate_2 = float(exchange_rate_1.text) 
print(exchange_rate_2)

#价格转换
final_price = price_3 * exchange_rate_2 #当地币值×汇率=商品价格(台币)
print(final_price)
#日本任天堂网站
import requests, bs4

#爬取官网售价
url_1 = "https://store-jp.nintendo.com/list/software/70010000000186.html"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
htmlfile_1 = requests.get(url_1, headers = headers)
objsoup_1 = bs4.BeautifulSoup(htmlfile_1.text, 'lxml')

price_1 = objsoup_1.find('div', class_ = 'productDetail--detail__price js-productMainRenderedPrice') #6,578円税込
price_2 = price_1.find('span') #6,578
price_3 = float(price_2.text[0] + price_2.text[2:]) #6578
print(price_3)

#汇率
url_2 = "https://www.google.com/search?q=%E6%97%A5%E5%B9%A3%E5%8F%B0%E5%B9%A3&sxsrf=AOaemvJz_v7oI4b11fnbGdgMitXTF06Vig%3A1633244289771&ei=gVRZYaO5LqO0qtsP6P6U-Ac&ved=0ahUKEwjj_eON1a3zAhUjmmoFHWg_BX8Q4dUDCA4&uact=5&oq=%E6%97%A5%E5%B9%A3%E5%8F%B0%E5%B9%A3&gs_lcp=Cgdnd3Mtd2l6EAMyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBggAEAcQHjIGCAAQBxAeMgYIABAHEB4yBQgAEIAEOgcIIxCwAxAnOgcIABBHELADOgcIABCxAxBDOggIABCABBCxAzoECAAQQzoLCAAQgAQQsQMQgwE6BQgAEM0CSgQIQRgAUMCJKliMlypg8p8qaAJwAngAgAHtAYgBigmSAQUwLjQuM5gBAKABAcgBA8ABAQ&sclient=gws-wiz"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
htmlfile_2 = requests.get(url_2, headers = headers)
objsoup_2 = bs4.BeautifulSoup(htmlfile_2.text, 'lxml')

exchange_rate_1 = objsoup_2.find('span', class_ = 'DFlfde SwHCTb')
exchange_rate_2 = float(exchange_rate_1.text)
print(exchange_rate_2)

#价格转换
final_price = price_3 * exchange_rate_2
print(final_price)
#美国任天堂网站
import requests, bs4

#爬取官网售价
url_1 = "https://www.nintendo.com/games/detail/mario-kart-8-deluxe-switch/"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
htmlfile_1 = requests.get(url_1, headers = headers)
objsoup_1 = bs4.BeautifulSoup(htmlfile_1.text, 'lxml')

price_1 = objsoup_1.find('span', class_ = 'h2 msrp') #$59.99(但不知道为甚麽有空格出现...)
price_2 = price_1.text.strip() #使用strip()将空格删除
price_3 = float(price_2[1:]) #59.99
print(price_3)

#汇率
url_2 = "https://www.google.com/search?q=%E7%BE%8E%E9%87%91%E5%8F%B0%E5%B9%A3&sxsrf=AOaemvIXdG5ub-ANXTknvwTmkU8GO6PovA%3A1633245176880&ei=-FdZYeGONd2Lr7wProWosA0&ved=0ahUKEwjh6uS02K3zAhXdxYsBHa4CCtYQ4dUDCA4&uact=5&oq=%E7%BE%8E%E9%87%91%E5%8F%B0%E5%B9%A3&gs_lcp=Cgdnd3Mtd2l6EAMyBAgAEEMyCAgAEIAEELEDMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQ6CAgAEIAEELADOgcIABCwAxAeOgcIABCxAxBDOgsIABCABBCxAxCDAToFCAAQzQI6BggAEAcQHkoECEEYAVC6kg5YnfQOYIf7DmgBcAB4AIABwQOIAZ0MkgEJMS42LjEuMC4xmAEAoAEByAEKwAEB&sclient=gws-wiz"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
htmlfile_2 = requests.get(url_2, headers = headers)
objsoup_2 = bs4.BeautifulSoup(htmlfile_2.text, 'lxml')

exchange_rate_1 = objsoup_2.find('span', class_ = 'DFlfde SwHCTb')
exchange_rate_2 = float(exchange_rate_1.text)
print(exchange_rate_2)

#价格转换
final_price = price_3 * exchange_rate_2
print(final_price)
#整合程序
import requests, bs4

#place = [地区, 当地官网, 汇率查询]
HK = ["香港", "https://store.nintendo.com.hk/70010000009373", "https://www.google.com/search?q=%E6%B8%AF%E5%B9%A3%E5%8F%B0%E5%B9%A3&oq=%E6%B8%AF%E5%B9%A3&aqs=chrome.0.69i59j69i57j0i433i512j0i512l7.7520j1j7&sourceid=chrome&ie=UTF-8"]
JP = ["日本", "https://store-jp.nintendo.com/list/software/70010000000186.html", "https://www.google.com/search?q=%E6%97%A5%E5%B9%A3%E5%8F%B0%E5%B9%A3&sxsrf=AOaemvJz_v7oI4b11fnbGdgMitXTF06Vig%3A1633244289771&ei=gVRZYaO5LqO0qtsP6P6U-Ac&ved=0ahUKEwjj_eON1a3zAhUjmmoFHWg_BX8Q4dUDCA4&uact=5&oq=%E6%97%A5%E5%B9%A3%E5%8F%B0%E5%B9%A3&gs_lcp=Cgdnd3Mtd2l6EAMyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBggAEAcQHjIGCAAQBxAeMgYIABAHEB4yBQgAEIAEOgcIIxCwAxAnOgcIABBHELADOgcIABCxAxBDOggIABCABBCxAzoECAAQQzoLCAAQgAQQsQMQgwE6BQgAEM0CSgQIQRgAUMCJKliMlypg8p8qaAJwAngAgAHtAYgBigmSAQUwLjQuM5gBAKABAcgBA8ABAQ&sclient=gws-wiz"]
USA = ["美国", "https://www.nintendo.com/games/detail/mario-kart-8-deluxe-switch/", "https://www.google.com/search?q=%E7%BE%8E%E9%87%91%E5%8F%B0%E5%B9%A3&sxsrf=AOaemvIXdG5ub-ANXTknvwTmkU8GO6PovA%3A1633245176880&ei=-FdZYeGONd2Lr7wProWosA0&ved=0ahUKEwjh6uS02K3zAhXdxYsBHa4CCtYQ4dUDCA4&uact=5&oq=%E7%BE%8E%E9%87%91%E5%8F%B0%E5%B9%A3&gs_lcp=Cgdnd3Mtd2l6EAMyBAgAEEMyCAgAEIAEELEDMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQ6CAgAEIAEELADOgcIABCwAxAeOgcIABCxAxBDOgsIABCABBCxAxCDAToFCAAQzQI6BggAEAcQHkoECEEYAVC6kg5YnfQOYIf7DmgBcAB4AIABwQOIAZ0MkgEJMS42LjEuMC4xmAEAoAEByAEKwAEB&sclient=gws-wiz"]



def objsoup(url):
    #下载网页并建立beautifulsoup物件
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
    htmlfile = requests.get(url, headers = headers)
    return bs4.BeautifulSoup(htmlfile.text, 'lxml')
 

 
def Rate(place):
    #查询该地区与台币间之汇率
    a = objsoup(place[2])
    exchange_rate_1 = a.find('span', class_ = 'DFlfde SwHCTb')
    exchange_rate_2 = float(exchange_rate_1.text)
    return exchange_rate_2


    
def find_price(place):
    #从该地区官网爬取售价(当地币值)
    if place[0] == "日本":
        a = objsoup(place[1])
        price_1 = a.find('div', class_ = 'productDetail--detail__price js-productMainRenderedPrice') 
        price_2 = price_1.find('span') 
        return float(price_2.text[0] + price_2.text[2:])
        
    elif place[0] == "香港":
        b = objsoup(place[1])       
        price_1 = b.find('span', class_ = 'price')
        price_2 = price_1.text[4:]
        return float(price_2)
        
    else:
        c = objsoup(place[1])
        price_1 = c.find('span', class_ = 'h2 msrp')
        price_2 = price_1.text.strip()
        return float(price_2[1:])
        


print("香港的售价为:", find_price(HK)*Rate(HK))
print("日本的售价为:", find_price(JP)*Rate(JP))
print("美国的售价为:", find_price(USA)*Rate(USA))

本篇影片及程序码仅提供研究使用,请勿大量恶意地爬取资料造成对方网页的负担呦!
如果在影片中有说得不太清楚或错误的地方,欢迎留言告诉我,谢谢您的指教。


<<:  Day 26 : 插件篇 05 — 做好笔记备份,使用 Obsidian Git自动备份笔记到 Github

>>:  Day27:27 - 优化 - 後端 - recaptcha 验证机制

Jupyter Notebook 输入栏位设计(2)

前言 上一篇介绍 interact 基本的用法,可以设计使用者介面(UI),但无法取得输入值,本篇介...

Day 30 完赛了...然後呢?

最後一天~~~~~ 到最後一天,其实也不免俗的想发表一下完赛感想, 说真的,很开心参加这次的铁人赛,...

Best Spring Assisted Knife For 2021

Spring-assisted knives also called assisted openin...

Day 15【web3.js】一袋米要扛几楼

【前言】 这两天的文章都是 web3.js 的学习笔记,大部分内容都来自他们的官方文件!之後还会有...

Day 11 Self-attention(五) KQV矩阵整理

QKV矩阵 昨天讲到Self-attention会产生三种矩阵 Q(query) K(keys) V...