見出し画像

pythonとseleniumでAmazonのランキングを取得してみた!のコード

Youtubeで使用したコードをここに残しておきます。

PythonとSeleniumを用いてAmazonランキングを取得してみました。
TwitterでAmazonランキングをつぶやくBotを作成するためですね。それの前編になっています。

動画は以下になります。

特に説明することもないので何か気になったことがあればコメントにてお願いします。

from selenium import webdriver
import urllib
import requests
from time import sleep

# start Selenium
driver = webdriver.Chrome('chromedriver')

category_base = "https://www.amazon.co.jp/gp/bestsellers/"
category_toy = "toys"
category_toy_url = f"{category_base}{category_toy}/"
print(category_toy_url)
driver.get(category_toy_url)

my_id = "associate_id"
ranking_list = []


# Process href
def process_href(myid,href):
   head = "https://www.amazon.co.jp/"
   dp_str = "dp/"
   asin_base = href.split(dp_str)
   asin = asin_base[-1][:10]
   url = f"{head}{dp_str}{asin}?tag={my_id}"
   return url

def get_shortenURL(longUrl):
   sleep(1)
   url = 'https://api-ssl.bitly.com/v3/shorten'
   access_token = '自分のアクセストークン'
   query = {
           'access_token': access_token,
           'longurl':longUrl
           }
   r = requests.get(url,params=query).json()['data']['url']
   return r

# for
base_ele = driver.find_elements_by_css_selector('.a-section.a-spacing-none.aok-relative')
i=0
for base in base_ele:
   i+=1
   print(i)
   ranking_item = {}
   rank_ele = base.find_element_by_css_selector('span')
   rank=rank_ele.text

   base_2 = base.find_element_by_css_selector('.aok-inline-block.zg-item')

   a_ele = base_2.find_element_by_css_selector('a')
   href = a_ele.get_attribute('href')
   comp_url = process_href(my_id,href)
   # あとでやった方が効率がよさそう(ツイートするときとかに)
   #short_url = get_shortenURL(comp_url)
   short_url = comp_url

   title_ele = a_ele.find_element_by_css_selector('.p13n-sc-truncated')
   title = title_ele.text

   evaluation_ele = base_2.find_element_by_css_selector('div > a')
   evaluation = evaluation_ele.get_attribute('title')
   try:
       price_ele = base_2.find_element_by_css_selector('.a-row')
       price = price_ele.text
   except:
       price_ele = base_2.find_element_by_css_selector('.a-link-normal.a-text-normal')
       price = price_ele.text

   img_ele = base_2.find_element_by_css_selector('img')
   img_url = img_ele.get_attribute('src')
   # パスを追加してそこに保存するようにする。名前はまだ、(日付カテゴリランク)とかがよさそう
   img_path = img_url
   # save picture
   #urllib.request.urlretrieve(img_url, 'img_path')
   
   ranking_item.update(img_path=img_path, rank=rank, title=title, short_url=short_url, evaluation=evaluation, price=price)
   print(ranking_item)
   ranking_list.append(ranking_item)
   
print('抽出完了')

いただいたサポートは全額勉強のために使わせていただきます。 という綺麗事もありなんですけど、ただただモチベーションの維持に使わせていただこうかなと考えています。 という遊び心も置いといて、有難いことに記事を買っていただけているのでサポートしたいという気持ちだけでも有難いです。