Python-Web Scraping練習(2)

1931 ワード

以前の「web scraping練習」でもスターバックスメニューのスクロールが行われていましたが、当時はそれぞれの画像と名前だけがスクロールされていましたが、今回はカテゴリとサブカテゴリも保存されていました.
from selenium import webdriver
import pandas as pd
 
 
driver = webdriver.Chrome()
driver.get('https://www.starbucks.co.kr/menu/drink_list.do')
 
 
product_list = driver.find_element_by_class_name('product_list')
 
#サブcategoryの名前+サブcategoryの飲み物の数の空の文字列("")がリストとして作成されます.
product_category = product_list.find_elements_by_tag_name('dl>dt>a')
product_cate_name = [name.text for name in product_category]
 
subcategory名を空の文字列に挿入し、subcategory名を削除すると、飲料名のリストと数に一致し、1:1に対応します.
#削除するインデックスを含むリスト
idx_list = []
#for loopで削除するとインデックスが一致しないため、削除ではなく新しいリストに追加します.
new_category_list = []
 
 
for y in range(0, len(product_cate_name)):
#削除するインデックスのリストを作成します(空の文字列ではなく、サブカテゴリ名が属するインデックス)
if not product_cate_name[y] == '':
idx_list.append(y)
#サブcategory名を空の文字列に挿入
for x in range(0, len(idx_list)-1):
if y < idx_list[x+1] and y >= idx_list[x]:
product_cate_name[y] = product_cate_name[idx_list[x]]
#以上の方法では、最後のサブカテゴリの名前は適用されませんので、残りの空の文字列に最後のサブカテゴリの名前を付けます.
if product_cate_name[y] == '':
product_cate_name[y] = product_cate_name[idx_list[len(idx_list)-1]]
#y-1番目とy番目が異なる場合は、appendをnew categoryリストに追加します(サブカテゴリ名で削除されたリストが完了します)
if product_cate_name[y-1] == product_cate_name[y]:
new_category_list.append(product_cate_name[y-1])
 
 
product_li = product_list.find_elements_by_class_name('menuDataSet')
product_name = [name.find_element_by_tag_name('dd').text for name in product_li]
 
 
product_data = pd.DataFrame(
{
「Category」:「飲み物」、
'Sub-category': new_category_list,
'Name': product_name,
})
 
print(product_data)
 
product_data.to_csv('starbucks_menu.csv')

本当に複雑ですが、もっと簡単な方法があるはずです.Pythonはいつ慣れるのでしょうかㅠㅠ