# Python ์น ํฌ๋กค๋ง ๊ฐ์ด๋
## ํ์ต ๋ชฉํ
์น์ฌ์ดํธ์์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์์งํฉ๋๋ค.
## 1. ํฌ๋กค๋ง์ด๋?
์นํ์ด์ง์์ ๋ฐ์ดํฐ๋ฅผ ์๋ ์์งํ๋ ๊ธฐ์ ์
๋๋ค.
- ๊ฐ๊ฒฉ ๋น๊ต
- ๋ด์ค ์์ง
- ๋ฆฌ๋ทฐ ๋ถ์
- ๋ฐ์ดํฐ ์์ง
## 2. ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
pip install requests beautifulsoup4 selenium
## 3. requests๋ก HTML ๊ฐ์ ธ์ค๊ธฐ
import requests
response = requests.get("https://example.com")
response.status_code # 200
response.text # HTML ๋ด์ฉ
response.encoding = "utf-8"
ํค๋ ์ค์ :
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
## 4. BeautifulSoup ํ์ฑ
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "html.parser")
ํ๊ทธ๋ก ์ฐพ๊ธฐ:
soup.find("h1")
soup.find_all("p")
soup.find("div", class_="content")
soup.find("div", id="main")
soup.find("a", href=True)
## 5. CSS ์ ํ์
soup.select("div.content")
soup.select("#main")
soup.select("div > p")
soup.select("ul li")
soup.select("a[href]")
soup.select_one("h1")
## 6. ๋ฐ์ดํฐ ์ถ์ถ
ํ
์คํธ:
element.text
element.get_text()
element.get_text(strip=True)
์์ฑ:
element["href"]
element["src"]
element.get("class")
## 7. ์ค์ ์์ - ๋ด์ค ํฌ๋กค๋ง
import requests
from bs4 import BeautifulSoup
url = "https://news.example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
articles = []
for item in soup.select("div.news-item"):
title = item.select_one("h2").text.strip()
link = item.select_one("a")["href"]
date = item.select_one(".date").text.strip()
articles.append({"title": title, "link": link, "date": date})
## 8. Selenium (๋์ ํ์ด์ง)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
๋๊ธฐ:
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content"))
)
์์ ์ฐพ๊ธฐ:
driver.find_element(By.ID, "search")
driver.find_element(By.CLASS_NAME, "btn")
driver.find_element(By.CSS_SELECTOR, "div.content")
driver.find_elements(By.TAG_NAME, "a")
์
๋ ฅ/ํด๋ฆญ:
element.send_keys("๊ฒ์์ด")
element.click()
element.clear()
์คํฌ๋กค:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
HTML ๊ฐ์ ธ์ค๊ธฐ:
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
driver.quit()
## 9. ํ์ด์ง๋ค์ด์
page = 1
all_data = []
while page <= 10:
url = f"https://example.com/list?page={page}"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
items = soup.select(".item")
if not items:
break
for item in items:
all_data.append(item.text)
page += 1
time.sleep(1) # ์๋ฒ ๋ถํ ๋ฐฉ์ง
## 10. ๋ฐ์ดํฐ ์ ์ฅ
CSV:
import csv
with open("data.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["title", "link"])
writer.writeheader()
writer.writerows(articles)
JSON:
import json
with open("data.json", "w", encoding="utf-8") as f:
json.dump(articles, f, ensure_ascii=False, indent=2)
Pandas:
import pandas as pd
df = pd.DataFrame(articles)
df.to_csv("data.csv", index=False)
## 11. ์๋ฌ ์ฒ๋ฆฌ
import time
for url in urls:
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
# ํ์ฑ
except requests.RequestException as e:
print(f"Error: {e}")
continue
finally:
time.sleep(1)
## 12. ์ค๋ฆฌ์ ํฌ๋กค๋ง
robots.txt ํ์ธ:
https://example.com/robots.txt
์์ฒญ ๊ฐ๊ฒฉ ๋๊ธฐ:
import time
time.sleep(1)
User-Agent ์ค์ :
headers = {"User-Agent": "MyBot/1.0"}
์ ์๊ถ ์ค์:
- ์์ง ๋ฐ์ดํฐ ์์
์ ์ฌ์ฉ ์ฃผ์
- ์๋ฒ ๋ถํ ์ต์ํ
- ์ด์ฉ์ฝ๊ด ํ์ธ
## ์ถ์ฒ ํ์ต ์์
1. requests + BeautifulSoup ๊ธฐ์ด
2. CSS ์ ํ์ ํ์ฉ
3. Selenium ๋์ ํ์ด์ง
4. ํ์ด์ง๋ค์ด์
์ฒ๋ฆฌ
5. ์๋ฌ ์ฒ๋ฆฌ์ ์ ์ฅ