-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
260 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,260 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 2, | ||
"id": "64523b0f", | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stderr", | ||
"output_type": "stream", | ||
"text": [ | ||
"/var/folders/z_/w5_jprkx4n9grd7jx_1lqz8r0000gn/T/ipykernel_6098/2399819394.py:10: DeprecationWarning: executable_path has been deprecated, please pass in a Service object\n", | ||
" driver = webdriver.Chrome(executable_path='/Users/kimsieun/Documents/Daitgirls/FinalProject/chromedriver')\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"from selenium import webdriver\n", | ||
"from bs4 import BeautifulSoup\n", | ||
"from selenium.webdriver.chrome.service import Service\n", | ||
"from webdriver_manager.chrome import ChromeDriverManager\n", | ||
"import pandas as pd\n", | ||
"\n", | ||
"chrome_optios = webdriver.ChromeOptions()\n", | ||
"# driver = webdriver.Chrome(service=Service(ChromeDriverManager(os_type=\"mac_arm64\").install()))\n", | ||
"# driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_option)\n", | ||
"driver = webdriver.Chrome(executable_path='/Users/kimsieun/Documents/Daitgirls/FinalProject/chromedriver')" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"id": "1f6b0467", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"# 크롤링할 주소 설정\n", | ||
"url = 'https://namu.wiki/w/%ED%81%AC%EB%A0%88%EC%9D%B4%EC%A7%80%EB%A0%88%EC%9D%B4%EC%8B%B1%20%EC%B9%B4%ED%8A%B8%EB%9D%BC%EC%9D%B4%EB%8D%94/%ED%8A%B8%EB%9E%99/1920' #카트 트랙 랭킹 \n", | ||
"driver.get(url)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 16, | ||
"id": "ed5db561", | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"1920 수상한 증기 공장\n", | ||
" \n", | ||
"러쉬플러스\n", | ||
"난이도●●○○○\n", | ||
"랩3바퀴\n", | ||
"트랙 길이9.5km\n", | ||
"진행 방향시계방향\n", | ||
"트랙 분류아이템전\n", | ||
"AI 주행X\n", | ||
"서버 \n", | ||
"첫 등장일2013년 12월 26일\n", | ||
"리그 트랙-\n", | ||
"라이센스모바일: 루키\n", | ||
"약칭증기공장\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"# 소스를 읽어 BeatuifulSoup를 이용해 파싱\n", | ||
"html = driver.page_source # 브라우저가 가지고 있는 정보를 가져옴\n", | ||
"soup = BeautifulSoup(html, \"html.parser\")\n", | ||
"track_list = soup.select(\"table.UQjgK8i0._f0b7325cc9e2662864c573d822bf4dca\")\n", | ||
"# print(track_list[0].prettify())\n", | ||
"trs = track_list[0].select(\"tr\") \n", | ||
"for tr in trs:\n", | ||
" print(tr.text)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 35, | ||
"id": "91cb0379", | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"data": { | ||
"text/html": [ | ||
"<div>\n", | ||
"<style scoped>\n", | ||
" .dataframe tbody tr th:only-of-type {\n", | ||
" vertical-align: middle;\n", | ||
" }\n", | ||
"\n", | ||
" .dataframe tbody tr th {\n", | ||
" vertical-align: top;\n", | ||
" }\n", | ||
"\n", | ||
" .dataframe thead th {\n", | ||
" text-align: right;\n", | ||
" }\n", | ||
"</style>\n", | ||
"<table border=\"1\" class=\"dataframe\">\n", | ||
" <thead>\n", | ||
" <tr style=\"text-align: right;\">\n", | ||
" <th></th>\n", | ||
" <th>트랙 이름</th>\n", | ||
" <th>태그</th>\n", | ||
" <th>난이도</th>\n", | ||
" <th>랩</th>\n", | ||
" <th>트랙 길이</th>\n", | ||
" <th>진행 방향</th>\n", | ||
" <th>트랙 분류</th>\n", | ||
" <th>AI 주행</th>\n", | ||
" <th>첫 등장일</th>\n", | ||
" <th>리그 트랙</th>\n", | ||
" <th>라이센스</th>\n", | ||
" <th>약칭</th>\n", | ||
" </tr>\n", | ||
" </thead>\n", | ||
" <tbody>\n", | ||
" <tr>\n", | ||
" <th>0</th>\n", | ||
" <td>1920 수상한 증기 공장</td>\n", | ||
" <td>러쉬플러스</td>\n", | ||
" <td>●●○○○</td>\n", | ||
" <td>3바퀴</td>\n", | ||
" <td>9.5km</td>\n", | ||
" <td>시계방향</td>\n", | ||
" <td>아이템전</td>\n", | ||
" <td>X</td>\n", | ||
" <td>2013년 12월 26일</td>\n", | ||
" <td>-</td>\n", | ||
" <td>모바일: 루키</td>\n", | ||
" <td>증기공장</td>\n", | ||
" </tr>\n", | ||
" <tr>\n", | ||
" <th>1</th>\n", | ||
" <td>1920 기차역 질주</td>\n", | ||
" <td></td>\n", | ||
" <td>●●○○○[구3]</td>\n", | ||
" <td>2바퀴</td>\n", | ||
" <td>8.6km</td>\n", | ||
" <td>시계방향</td>\n", | ||
" <td>스피드전</td>\n", | ||
" <td>X</td>\n", | ||
" <td>2013년 12월 26일</td>\n", | ||
" <td>-</td>\n", | ||
" <td>-</td>\n", | ||
" <td>기차역</td>\n", | ||
" </tr>\n", | ||
" <tr>\n", | ||
" <th>2</th>\n", | ||
" <td>1920 아슬아슬 비행장</td>\n", | ||
" <td>노멀 러쉬플러스</td>\n", | ||
" <td>●●●○○[구2]</td>\n", | ||
" <td>2바퀴</td>\n", | ||
" <td>10.5km[8]</td>\n", | ||
" <td>시계방향</td>\n", | ||
" <td>스피드전</td>\n", | ||
" <td>X</td>\n", | ||
" <td>2014년 1월 23일</td>\n", | ||
" <td>-</td>\n", | ||
" <td>모바일: 루키</td>\n", | ||
" <td>1920, 1920비행장</td>\n", | ||
" </tr>\n", | ||
" </tbody>\n", | ||
"</table>\n", | ||
"</div>" | ||
], | ||
"text/plain": [ | ||
" 트랙 이름 태그 난이도 랩 트랙 길이 진행 방향 트랙 분류 AI 주행 \\\n", | ||
"0 1920 수상한 증기 공장 러쉬플러스 ●●○○○ 3바퀴 9.5km 시계방향 아이템전 X \n", | ||
"1 1920 기차역 질주 ●●○○○[구3] 2바퀴 8.6km 시계방향 스피드전 X \n", | ||
"2 1920 아슬아슬 비행장 노멀 러쉬플러스 ●●●○○[구2] 2바퀴 10.5km[8] 시계방향 스피드전 X \n", | ||
"\n", | ||
" 첫 등장일 리그 트랙 라이센스 약칭 \n", | ||
"0 2013년 12월 26일 - 모바일: 루키 증기공장 \n", | ||
"1 2013년 12월 26일 - - 기차역 \n", | ||
"2 2014년 1월 23일 - 모바일: 루키 1920, 1920비행장 " | ||
] | ||
}, | ||
"execution_count": 35, | ||
"metadata": {}, | ||
"output_type": "execute_result" | ||
} | ||
], | ||
"source": [ | ||
"track_data_list =[]\n", | ||
"for track_info in track_list:\n", | ||
" name = track_info.select(\"tr\")[0] # 코드 가독성을 위해 변수 이름을 좀 더 간단하게 변경\n", | ||
" tag = track_info.select(\"tr\")[2]\n", | ||
" hardness = track_info.select(\"tr\")[3]\n", | ||
" laps = track_info.select(\"tr\")[4]\n", | ||
" track_length = track_info.select(\"tr\")[5]\n", | ||
" direction = track_info.select(\"tr\")[6]\n", | ||
" playmode = track_info.select(\"tr\")[7]\n", | ||
" AI = track_info.select(\"tr\")[8]\n", | ||
" # 서버는 수집에서 제외\n", | ||
" release_date = track_info.select(\"tr\")[10]\n", | ||
" league_track = track_info.select(\"tr\")[11]\n", | ||
" license = track_info.select(\"tr\")[12]\n", | ||
" nickname = track_info.select(\"tr\")[13]\n", | ||
" \n", | ||
" track_data_list.append(\n", | ||
" [\n", | ||
" name.text,\n", | ||
" tag.text,\n", | ||
" hardness.text[3:],\n", | ||
" laps.text[1:],\n", | ||
" track_length.text[5:],\n", | ||
" direction.text[5:],\n", | ||
" playmode.text[5:],\n", | ||
" AI.text[5:],\n", | ||
" release_date.text[5:],\n", | ||
" league_track.text[5:],\n", | ||
" license.text[4:],\n", | ||
" nickname.text[2:]\n", | ||
" ]\n", | ||
" )\n", | ||
"\n", | ||
"columns = [\"트랙 이름\", \"태그\", \"난이도\", \"랩\", \"트랙 길이\", \"진행 방향\", \"트랙 분류\", \"AI 주행\", \"첫 등장일\", \"리그 트랙\", \"라이센스\", \"약칭\"]\n", | ||
"df = pd.DataFrame(track_data_list, columns = columns)\n", | ||
"df\n", | ||
"\n", | ||
"# driver.close()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": null, | ||
"id": "3105fe41", | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "Python 3 (ipykernel)", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.10.5" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 5 | ||
} |