์คํฌ๋ํ์ด๋
์๋ํ ์คํฌ๋ํ(Automated Web Scraping)์ ์น์ฌ์ดํธ์์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ถ์ถํ๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค. ์ด๋ฅผ ํตํด ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๊ณ ๋ถ์ฌ๋ฃ๋ ์์ ์ ์๋ํํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋ํ ์์ ์ ์ํํ๋ค.
Ex.
์ฃผ์ ์์
- HTTP ์์ฒญ:
- ์น์ฌ์ดํธ์ ์ ๊ทผํ๊ธฐ ์ํด HTTP GET, POST ์์ฒญ์ ๋ณด๋ ๋๋ค.
- requests, axios ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- HTML ํ์ฑ:
- ์น ํ์ด์ง์ HTML ๊ตฌ์กฐ๋ฅผ ํ์ฑํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค.
- BeautifulSoup, cheerio ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์๋ํ ๋๊ตฌ:
- ํน์ ์์ ์ ์๋์ผ๋ก ์ํํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์๋ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Selenium, Puppeteer ๋ฑ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉ ์์
- Python๊ณผ BeautifulSoup์ ์ด์ฉํ ๊ธฐ๋ณธ ์คํฌ๋ํ
import requests from bs4 import BeautifulSoup # URL ์ค์ url = 'https://example.com' # ์นํ์ด์ง ์์ฒญ response = requests.get(url) response.raise_for_status() # HTML ํ์ฑ soup = BeautifulSoup(response.text, 'html.parser') # ํ์ํ ๋ฐ์ดํฐ ์ถ์ถ titles = soup.find_all('h1') for title in titles: print(title.get_text())
- Node.js์ Cheerio๋ฅผ ์ด์ฉํ ๊ธฐ๋ณธ ์คํฌ๋ํ
const axios = require('axios'); const cheerio = require('cheerio'); // URL ์ค์ const url = 'https://example.com'; // ์นํ์ด์ง ์์ฒญ axios.get(url) .then(response => { // HTML ํ์ฑ const $ = cheerio.load(response.data); // ํ์ํ ๋ฐ์ดํฐ ์ถ์ถ $('h1').each((index, element) => { console.log($(element).text()); }); }) .catch(error => { console.error('Error fetching data:', error); });
- Selenium์ ์ด์ฉํ ๋ธ๋ผ์ฐ์ ์๋ํ
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # ์น ๋๋ผ์ด๋ฒ ์ค์ driver = webdriver.Chrome() # URL ์ค์ driver.get('https://example.com') # ํ์ํ ๋ฐ์ดํฐ ์ถ์ถ titles = driver.find_elements(By.TAG_NAME, 'h1') for title in titles: print(title.text) # ๋ธ๋ผ์ฐ์ ๋ซ๊ธฐ driver.quit()
์๋ํ ์คํฌ๋ํ์ ํ์ฉ ์ฌ๋ก
- ๋ฐ์ดํฐ ์์ง: ๋ด์ค, ๋ธ๋ก๊ทธ, ์์ ๋ฏธ๋์ด ๋ฑ์ ์น์ฌ์ดํธ์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ๋ถ์
- ๊ฐ๊ฒฉ ๋น๊ต: ์ฌ๋ฌ ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์์ ์ ํ์ ๊ฐ๊ฒฉ์ ์์งํ์ฌ ๋น๊ต\
- ๋ถ๋์ฐ ์ ๋ณด: ๋ถ๋์ฐ ์ฌ์ดํธ์์ ๋งค๋ฌผ ์ ๋ณด๋ฅผ ์์ง
- ๋ฆฌ์์น: ํ์ ๋ ผ๋ฌธ, ๋ณด๊ณ ์ ๋ฑ ๋ค์ํ ์๋ฃ๋ฅผ ์๋์ผ๋ก ์์ง
์ฃผ์ ์ฌํญ
- ์ ์๊ถ: ์คํฌ๋ํํ๋ ค๋ ์ฌ์ดํธ์ ์ ์๊ถ ์ ์ฑ ์ ์ค์
- ๋ก๋ด ๋ฐฐ์ ํ์ค: robots.txt ํ์ผ์ ํ์ธํ์ฌ ์คํฌ๋ํ์ด ํ์ฉ๋๋์ง ํ์ธ
- ๊ณผ๋ํ ์์ฒญ: ์น ์๋ฒ์ ๊ณผ๋ํ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ์ ๋ถ๋ด์ ์ค ์ ์์ผ๋ฏ๋ก ์ ์ ํ ์๊ฐ ๊ฐ๊ฒฉ์ ์ ์ง
- ๋ฒ์ ๋ฌธ์ : ์คํฌ๋ํ์ด ๋ฒ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ๊ด๋ จ ๋ฒ๋ฅ ์ ์ค์
์๋ํ ์คํฌ๋ํ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์์งํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ์ง๋ง, ์ค๋ฆฌ์ ์ด๊ณ ๋ฒ์ ์ธ ์ธก๋ฉด์ ํญ์ ๊ณ ๋ ค
'DevSecOps > ์ํ๋ฆฌํฐ(Security)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Credential Stuffing VS ๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ -์์ฑ์ค- (0) | 2025.01.08 |
---|---|
Credential Stuffing ์ด๋ (0) | 2025.01.08 |
์ ๋ก๋ฐ์ด ๊ณต๊ฒฉ-2 (2) | 2024.10.12 |
์ ๋ก๋ฐ์ด ๊ณต๊ฒฉ (1) | 2024.08.16 |
WAF ์ ๊ฐ๋ (4) | 2024.03.05 |
๋๊ธ