Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Database
- NIO
- 자바
- python
- JVM
- Java
- 코틀린
- android
- 파이썬
- 리눅스
- 웹 크롤링
- 인프라
- Spring boot
- 역학
- flet
- lombok
- 뉴턴역학
- chatGPT's answer
- 자바암호
- 소프트웨어공학
- write by GPT-4
- write by chatGPT
- oracle
- 시스템
- 유닉스
- 자바네트워크
- kotlin
- GPT-4's answer
- GIT
- 고전역학
Archives
- Today
- Total
Akashic Records
URL 깊이 우선 탐색(DFS) 웹 크롤러 본문
728x90
깊이 우선 탐색(DFS) 알고리즘을 사용하여 웹 페이지를 크롤링하는 파이썬 코드를 설계하겠습니다. DFS 알고리즘은 각 링크를 따라 최대한 깊이 들어가면서 크롤링을 진행하며, 스택이나 재귀 함수를 사용하여 구현할 수 있습니다. 여기서는 재귀 함수를 사용하여 구현하겠습니다.
필요한 라이브러리 설치
pip install beautifulsoup4 requests
깊이 우선 탐색(DFS) 웹 크롤러 코드
import requests
from urllib.parse import urljoin, urlparse
from bs4 import BeautifulSoup
def is_valid_url(base_url, url):
""" 동일 도메인 내의 URL인지 검사하고, 유효한 링크인지 확인합니다. """
parsed_base = urlparse(base_url)
parsed_url = urlparse(url)
if parsed_base.netloc != parsed_url.netloc:
return False
if not parsed_url.scheme.startswith('http'):
return False
return True
def get_links(url):
""" 주어진 URL 페이지에서 모든 링크를 추출합니다. """
try:
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
links = set()
for link in soup.find_all('a', href=True):
full_url = urljoin(url, link['href'])
if is_valid_url(url, full_url):
links.add(full_url)
return links
except requests.exceptions.RequestException:
return set()
def dfs_crawl(url, visited, max_depth, current_depth=0):
""" 깊이 우선 탐색(DFS)을 사용하여 웹 크롤링을 실행합니다. """
if current_depth > max_depth:
return
if url in visited:
return
visited.add(url)
print(f"Visiting: {url} at depth {current_depth}")
links = get_links(url)
for link in links:
dfs_crawl(link, visited, max_depth, current_depth + 1)
def start_crawling(start_url, max_depth=3):
visited = set()
dfs_crawl(start_url, visited, max_depth)
print("Crawling finished.")
# 시작 URL 설정
start_url = 'http://books.toscrape.com/'
start_crawling(start_url, max_depth=3)
코드 설명
- 함수
is_valid_url
: 주어진 URL이 시작 URL과 같은 도메인을 가지는지, 그리고http
나https
프로토콜을 사용하는지 확인합니다. - 함수
get_links
:BeautifulSoup
을 사용하여 페이지에서 모든<a>
태그의href
속성을 읽고, 절대 URL로 변환한 후, 유효한 URL만 반환합니다. - 함수
dfs_crawl
: 깊이 우선 탐색 로직을 사용하여 웹 크롤링을 수행합니다. 재귀 호출을 통해 각 링크를 따라 최대 깊이(max_depth
)까지 탐색합니다. - 함수
start_crawling
: 크롤링을 시작하기 위해visited
집합과dfs_crawl
함수를 초기화하고 호출합니다.
DFS 크롤러는 특히 깊은 링크 구조를 가진 사이트에서 유용합니다. 그러나 너무 깊은 재귀는 스택 오버플로를 일으킬 수 있으므로, max_depth
값을 적절히 설정하는 것이 중요합니다. 또한, 실제 사용 시에는 더 많은 오류 처리와 로봇 배제 표준(robots.txt
) 준수를 고려해야 합니다.
728x90
'Web Crawling for Beginners' 카테고리의 다른 글
학습사이트 http://quotes.toscrape.com/ BFS 크롤링 (0) | 2024.04.24 |
---|---|
학습사이트 http://books.toscrape.com BFS 크롤링 (0) | 2024.04.24 |
URL 너비 우선 탐색(BFS) 웹 크롤러 (0) | 2024.04.24 |
자주 사용하는 BeautifulSoup 코드 스니펫 (0) | 2024.04.23 |
BeautifulSoup API 가이드 (0) | 2024.04.23 |
Comments