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 |
Tags
- spring data jpa
- 유닉스
- 리눅스
- 역학
- 고전역학
- write by GPT-4
- 코틀린
- GPT-4's answer
- NIO
- 자바암호
- spring integration
- 웹 크롤링
- 데이터베이스
- 인프라
- JVM
- 시스템
- 소프트웨어공학
- kotlin
- Java
- python
- 자바
- 자바네트워크
- chatGPT's answer
- 파이썬
- write by chatGPT
- flet
- android
- Database
- jpa
- oracle
Archives
- Today
- Total
기억을 지배하는 기록
학습사이트 http://books.toscrape.com BFS 크롤링 본문
Web Crawling for Beginners
학습사이트 http://books.toscrape.com BFS 크롤링
Andrew's Akashic Records 2024. 4. 24. 13:43728x90
http://books.toscrape.com/
사이트를 너비 우선 탐색(BFS) 방식으로 크롤링하는 파이썬 스크립트를 제공하겠습니다. 이 스크립트는 각 페이지를 방문하고, 각 책의 정보(제목, 가격, 재고 상태)를 추출하며, 모든 페이지를 방문할 때까지 'Next' 버튼을 통해 다음 페이지로 넘어갑니다.
필요한 라이브러리 설치
pip install beautifulsoup4 requests
너비 우선 탐색(BFS) 웹 크롤러 코드
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
from collections import deque
def get_books_from_page(soup):
""" 페이지에서 책들의 정보를 추출하는 함수 """
books = []
for book in soup.find_all('article', class_='product_pod'):
title = book.find('h3').find('a')['title']
price = book.find('p', class_='price_color').text
stock = book.find('p', class_='instock availability').text.strip()
books.append({'title': title, 'price': price, 'stock': stock})
return books
def bfs_crawl(start_url, max_depth=3):
""" 너비 우선 탐색을 사용하여 사이트 전체를 크롤링 """
queue = deque([(start_url, 0)]) # URL과 현재 깊이를 저장합니다.
visited = set()
all_books = []
while queue:
current_url, depth = queue.popleft()
if depth > max_depth:
break
if current_url in visited:
continue
visited.add(current_url)
response = requests.get(current_url)
soup = BeautifulSoup(response.text, 'html.parser')
all_books.extend(get_books_from_page(soup))
# 다음 페이지 링크 찾기
next_button = soup.find('li', class_='next')
if next_button:
next_url = next_button.find('a')['href']
next_page_url = urljoin(current_url, next_url)
queue.append((next_page_url, depth+1))
return all_books
# 시작 URL
start_url = 'http://books.toscrape.com/'
books = bfs_crawl(start_url, max_depth=3)
# 결과 출력
for book in books:
print(book)
코드 설명
- 함수
get_books_from_page
:- BeautifulSoup 객체를 받아 해당 페이지에서 책의 정보를 추출합니다.
- 책의 제목, 가격, 재고 상태를 딕셔너리로 저장하고, 모든 책 정보를 리스트로 반환합니다.
- 함수
bfs_crawl
:- 시작 URL에서부터 크롤링을 시작하여, 너비 우선 탐색 방식으로 모든 페이지를 방문합니다.
- 각 페이지마다
get_books_from_page
함수를 호출하여 책 정보를 수집합니다. - 페이지의 'Next' 버튼을 찾아 다음 페이지 URL을 큐에 추가합니다.
이 스크립트는 http://books.toscrape.com/
사이트의 모든 페이지를 방문하며 책의 정보를 수집합니다. BFS를 사용함으로써, 사이트의 모든 책 정보를 체계적으로 방문하고 추출할 수 있습니다.
728x90
'Web Crawling for Beginners' 카테고리의 다른 글
Python 사용자 인증 (Session) 받기 (0) | 2024.04.25 |
---|---|
학습사이트 http://quotes.toscrape.com/ BFS 크롤링 (0) | 2024.04.24 |
URL 깊이 우선 탐색(DFS) 웹 크롤러 (0) | 2024.04.24 |
URL 너비 우선 탐색(BFS) 웹 크롤러 (0) | 2024.04.24 |
자주 사용하는 BeautifulSoup 코드 스니펫 (0) | 2024.04.23 |
Comments