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はいつ慣れるのでしょうかㅠㅠ
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はいつ慣れるのでしょうかㅠㅠ
Reference
この問題について(Python-Web Scraping練習(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@hwangninaa/Mini-Project-Starbucks-Menu-Siteテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol