[ネットスクロール]プラチナ売り場情報をスクロール


ポートフォリオを整理する過程で記憶を取り戻すために、昨年作ったプラチナ搾りプログラムについて書きたいと思います.
なぜプラチナサイトでスクロールするのかと聞かれたら、これは私の大好きなフライドチキンブランドだからです.(唐辛子マヨが大好き)

ホームページの構成



現在プラチナ公式サイトのホームページはこうなっています△とうもろこし粥もおいしいです.
「ショップの検索」ページにログインすると、現在のエリアが自動的に選択され、選択したエリアのショップ情報が左側に出力されます.

1つの地域を変更するたびに店の数が変わり、どの地域も選択していない場合(都市または都市を選択してください)は、作成日に基づいて718件のすべての店の情報が1-36ページの間で出力されます.

これを利用して,商店名,電話番号,住所を収集するネットワークスクロールを実現した.

インプリメンテーション


まず、必要なモジュールをインポートします.
from bs4 import BeautifulSoup
import pandas as pd

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
puradak_URL = "https://www.puradakchicken.com/startup/store.asp"
wd = webdriver.Chrome('./WebDriver/chromedriver.exe')
wd.get(puradak_URL)
time.sleep(1)  		# 웹페이지 연결할 동안 1초 대기
Webdriverを使用してプラチナのホームページに接続します.
ロードが遅くなる可能性がありますので、真ん中でtime.sleep(1)を使って1秒待ってください.

チェックボックスの要素をチェックすると、id=areaidxが1つのオプションであり、都市と都市を選択するためのオプションは(1)であることがわかります.CS SELECTORを使用して、次のようにクリックします.
wd.find_element(By.CSS_SELECTOR, "#areaidx > option:nth-child(1)").click()
各ページに20個の売場情報を印刷し、最初のインデックスが2で始まるので、2から22までの間を巡回して売場情報を取得します.
連絡先の場合、前の연락처 :では、数字とハイフンの入力のみが許可されています.
最後のページには20の売り場のすべての情報がない可能性があるのでtry-exist文を使って書きます.
for i in range(2, 22): #1페이지당 20개의 매장이 노출됨.
	try:
		time.sleep(1)  # 스크립트 실행 할 동안 1초 대기
		html = wd.page_source
		soupPRD = BeautifulSoup(html, 'html.parser')
		store_name_h2 = soupPRD.select(f"#result_search > li:nth-of-type({i}) > span > p.name")
		store_name = store_name_h2[0].string
		print(store_name)  # 매장 이름 출력
		store_doro = soupPRD.select(f"#result_search > li:nth-of-type({i}) > span > p.juso > span.doro")[0].string #도로명 주소
		store_phone = soupPRD.select(f"#result_search > li:nth-of-type({i}) > span > p.tel")[0].string #전화번호
		store_phone = store_phone.split()[2]           #연락처: 는 제외하고 전화번호만 가져오기
		print(store_phone)
		print(store_doro)
		result.append([store_name] + [store_doro] + [store_phone])
	except:
		continue
最初のページからスクロールが完了したら、次のボタンに移動してクリックします.
if page > 1:
	nextBtn = wd.find_element(By.CLASS_NAME, "next")        # 다음 버튼
	wd.execute_script('arguments[0].click()', nextBtn)      # 다음 버튼 클릭
スクロールが完了したら、データフレームに変換してcsvに保存します.
PRD_tbl = pd.DataFrame(result, columns=('store', 'address', 'phone'))
PRD_tbl.to_csv('./data/puradak_store.csv', encoding='cp949', mode='w', index=False)
念のため、私は回転して、動作はとても良いです:D

フルコードリンク(ハブ)