[ネットスクロール]プラチナ売り場情報をスクロール
10152 ワード
ポートフォリオを整理する過程で記憶を取り戻すために、昨年作ったプラチナ搾りプログラムについて書きたいと思います.
なぜプラチナサイトでスクロールするのかと聞かれたら、これは私の大好きなフライドチキンブランドだからです.(唐辛子マヨが大好き)
ホームページの構成
なぜプラチナサイトでスクロールするのかと聞かれたら、これは私の大好きなフライドチキンブランドだからです.(唐辛子マヨが大好き)
ホームページの構成
現在プラチナ公式サイトのホームページはこうなっています△とうもろこし粥もおいしいです.
「ショップの検索」ページにログインすると、現在のエリアが自動的に選択され、選択したエリアのショップ情報が左側に出力されます.
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
フルコードリンク(ハブ)
Reference
この問題について([ネットスクロール]プラチナ売り場情報をスクロール), 我々は、より多くの情報をここで見つけました
https://velog.io/@joniekwon/웹크롤링-푸라닭-매장-정보-크롤링-하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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초 대기
wd.find_element(By.CSS_SELECTOR, "#areaidx > option:nth-child(1)").click()
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) # 다음 버튼 클릭
PRD_tbl = pd.DataFrame(result, columns=('store', 'address', 'phone'))
PRD_tbl.to_csv('./data/puradak_store.csv', encoding='cp949', mode='w', index=False)
Reference
この問題について([ネットスクロール]プラチナ売り場情報をスクロール), 我々は、より多くの情報をここで見つけました https://velog.io/@joniekwon/웹크롤링-푸라닭-매장-정보-크롤링-하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol