π₯ μμ± λ°μ΄ν° μμ§μ μν μΉ ν¬λ‘€λ§ μ€ν¬λ¦½νΈ μμ±
λ¨Έμ λ¬λμ μν λ°μ΄ν°μ μ ν보νλ κ³Όμ μμ λ€μ΄λ°μμΌ ν νμΌμ μκ° λ§μ, μλμΌλ‘ μμ± νμΌλ€μ λ€μ΄λ‘λν μ μλ μΉ ν¬λ‘€λ§ μ€ν¬λ¦½νΈλ₯Ό μμ±νμλ€. μμ±ν μ€ν¬λ¦½νΈλ μλ 2κ°μ§μ μμλ₯Ό λ°μνλλ‘ μμ±λμλ€.
- λ€μ΄λ‘λ μ λ€μ΄λ νμΌμ μ΄λ¦μ μ§μ ν μ μλλ‘ ν¨
- νμΌμ λ€μ΄λ‘λ μ λ°μ΄ν°κ° μ μ₯λ μμΉλ₯Ό μ€μ ν μ μλλ‘ ν¨
μλλ μμ±ν ν¬λ‘€λ§ μ€ν¬λ¦½νΈμ μμ±ν μ½λμ λν μ€λͺ μ΄λ€.
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import requests
from bs4 import BeautifulSoup
1. selenium ν¨ν€μ§μμ νμν λͺ¨λλ€μ import
webdriver | μΉ λΈλΌμ°μ μ μ΄λ₯Ό μν ν΄λμ€ |
ActionChains | λ§μ°μ€ λ° ν€λ³΄λ λμ λͺ¨λ°©μ μν ν΄λμ€ |
Keys | νΉμ ν€ μ μ΄λ₯Ό μν ν΄λμ€ |
By0 | μΉ μμλ₯Ό μ°ΎκΈ° μν λ°©λ² μ§μ μ μν ν΄λμ€ |
2. μΌμμ μΈ λλ μ΄λ₯Ό μ£ΌκΈ° μν time λͺ¨λ import
3. μΉ νμ΄μ§μ λ΄μ©μ κ°μ Έμ€κΈ° μν requests λͺ¨λ import
4. HTML & XML λ¬Έμ νμ±κ³Ό κ²μμ μν BeautifulSoup λΌμ΄λΈλ¬λ¦¬ κ°μ Έμ€κΈ°
browser = webdriver.Chrome('./chromedriver.exe')
url = 'https://www.fss.or.kr/fss/bbs/B0000207/
list.do?menuNo=200691&bbsId=&cl1Cd=&pageIndex=16&sdate=
&edate=&searchCnd=1&searchWrd='
browser.get(url)
5. webdriver λͺ¨λμμ Chrome ν΄λμ€λ₯Ό μ¬μ©νμ¬ Chrome λΈλΌμ°μ λ₯Ό μ μ΄νκΈ° μν λλΌμ΄λ²λ₯Ό μμ±
6. ./chromedriver.exeλ Chrome λλΌμ΄λ²μ νμΌ κ²½λ‘
--> ν΄λΉ νμΌμ Chrome λΈλΌμ°μ μ Seleniumμ΄ μνΈ μμ©ν μ μλλ‘ ν΄μ£Όλ μν μ ν¨
7. url λ³μμ μ€ν¬λννκ³ μ νλ μΉ νμ΄μ§μ URLκ° μ μ₯
8. browser κ°μ²΄μ get λ©μλλ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ λ₯Ό ν΄λΉ URLλ‘ μ΄λ
--> μ΄λ₯Ό ν΅ν΄ Seleniumμ΄ λΈλΌμ°μ λ₯Ό μ μ΄νκ³ , μ§μ λ URLμ μ μν μ μκ² λ¨
+ 8λ²κΉμ§μ μ½λλ₯Ό μ€ννλ©΄ Seleniumμ ν΅ν΄ Chrome λΈλΌμ°μ κ° μ΄λ¦¬κ³ , μ§μ λ URLλ‘ μ΄λνκ² λλ€.
+ μ μ½λλ₯Ό μ€ν μ μλμ κ°μ κ²½κ³ κ° λ°μν μ μλλ°, μ΄λ 무μν΄λ 무κ΄νλ€.
act = ActionChains(browser)
lst = []
9. ActionChains ν΄λμ€μ browser κ°μ²΄λ₯Ό μ΄μ©νμ¬ act κ°μ²΄ μμ±
--> ActionChains Class
: λΈλΌμ°μ μμ μνν λμλ€μ μ μνκ³ μ μ΄νκΈ° μν ν΄λμ€
10. μμ± νμΌμ URLμ μ μ₯ν 리μ€νΈμΈ lst μμ±
from selenium.webdriver.common.by import By
for i in range(1, 10):
try:
element = browser.find_element(By.CSS_SELECTOR,
f'#content > div.bd-list > table > tbody
> tr:nth-child({i}) > td.title > a')
act.click(element).perform()
time.sleep(2)
target_element = browser.find_element(By.CSS_SELECTOR,
'#content > div.bd-view > div > video')
audio_url = target_element.get_attribute("src")
lst.append(audio_url)
except NoSuchElementException:
print(f"Element not found for row {i}. Skipping...")
finally:
browser.back()
time.sleep(2)
11. for 루νλ₯Ό μ¬μ©νμ¬ νΉμ λ²μμ νμ λν΄ μλ νμλ₯Ό λ°λ³΅
- find_element λ©μλλ₯Ό ν΅ν΄ CSS μ νμλ‘ μΉ μμ νμ
- act.click(element).perform() μ ν΅ν΄ μ°Ύμ μμ ν΄λ¦
- time.sleep(2) λ₯Ό ν΅ν΄ 2μ΄ λμ λκΈ°
- target_element.get_attribute("src")λ₯Ό μ¬μ©νμ¬ λμμ μμμ μμ±μμ μμ± νμΌ URL κ°μ Έμ€κΈ°
- κ°μ Έμ¨ URLμ lst 리μ€νΈμ μΆκ°
- browser.back()μ ν΅ν΄ μ΄μ νμ΄μ§λ‘ λλμκ°κΈ°
- time.sleep(2) λ₯Ό ν΅ν΄ 2μ΄ λμ λκΈ°
+ λ§μ½ NoSuchElementException μμΈκ° λ°μν κ²½μ°, ν΄λΉ νμ΄ μλ€λ λ©μμ§λ₯Ό μΆλ ₯νκ³ ν΄λΉ μμλ₯Ό μ€ν΅ν¨
+ 11λ² μ½λκΉμ§ μ€ννμ κ²½μ°, μλμ κ°μ΄ λΈλΌμ°μ κ° μ§μμ μΌλ‘ μ μ΄λλ€.
print(lst)
import os
import requests
# μ μ₯ν κ²½λ‘ μ€μ
save_directory = "./Voice_FIles_Stored_Here"
# μ μ₯ν λλ ν λ¦¬κ° μλ€λ©΄ μμ±
if not os.path.exists(save_directory):
os.makedirs(save_directory)
i = 10
for url in lst:
response = requests.get(url)
file_path = os.path.join(save_directory, f'{i}.mp3')
with open(file_path, 'wb') as file:
file.write(response.content)
i += 1
browser.quit()
12. print(lst)λ₯Ό ν΅ν΄ μμ§ν μμ± νμΌμ URL μΆλ ₯
13. save_directory λ³μμ μμ± νμΌμ μ μ₯ν κ²½λ‘λ₯Ό μ§μ
+ λ§μΌ κ²½λ‘κ° μ‘΄μ¬νμ§ μμ κ²½μ° path μμ±
14. for 루νλ₯Ό μ¬μ©νμ¬ lstμ μ μ₯λ μμ± νΌμΌμ URLμ λν΄ μλ κ³Όμ λ°λ³΅
- requests.get(url)μ μ¬μ©νμ¬ ν΄λΉ URLλ‘ GET μμ² μ μ‘
- μλ Ήν μλ΅μ response λ³μμ μ μ₯
- file_path λ³μμ μ μ₯ν νμΌλͺ κ³Ό μ μ₯ κ²½λ‘λ₯Ό μ§μ
- os.path.join() ν¨μλ₯Ό μ΄μ©νμ¬ save_directory μ νμΌλͺ (λ³μ i μ κ°)μ κ²°ν©
- open(file_path, 'wb')λ₯Ό μ¬μ©νμ¬ νμΌμ μ°κΈ° λͺ¨λλ‘ Open --> 'wb'μ νμΌμ μ΄μ§ λͺ¨λλ‘ μ΄κΈ° μν νλκ·Έ
- file.write(response.content)λ₯Ό μ¬μ©νμ¬ μλ΅μ λ΄μ©μ νμΌμ μμ±
15. λͺ¨λ μμ μ΄ λλλ©΄ browser.quit() λ©μλλ₯Ό ν΅ν΄ Selenium WebDriver μ’ λ£
μ μ½λλ₯Ό λͺ¨λ μννλ©΄, νμΌμ μ μ₯ κ²½λ‘μΈ Voice_FIles_Stored_Here νμΌμ λ°μ΄ν°λ€μ΄ μ μμ μΌλ‘ μ μ₯λμμμ νμΈν μ μλ€.