일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- jpa
- python
- 소프트웨어공학
- 웹 크롤링
- flet
- oracle
- chatGPT's answer
- 고전역학
- Database
- 자바암호
- GPT-4's answer
- 역학
- 리눅스
- 데이터베이스
- 자바
- 코틀린
- spring data jpa
- NIO
- spring integration
- write by chatGPT
- 유닉스
- 인프라
- JVM
- 시스템
- 파이썬
- 자바네트워크
- android
- kotlin
- Java
- write by GPT-4
- Today
- Total
기억을 지배하는 기록
Scrapy 프레임워크 본문
Scrapy는 웹 크롤링 및 데이터 스크래핑을 위해 사용되는 오픈 소스 파이썬 프레임워크입니다. 웹 사이트에서 데이터를 추출하고 파싱하는 데 필요한 모든 도구를 제공합니다. Scrapy는 비교적 쉽게 사용할 수 있으며, 강력한 성능을 제공하여 대규모 웹 사이트의 데이터를 효율적으로 수집할 수 있습니다.
주요 특징
- 유연성과 확장성: Scrapy는 사용자의 요구에 맞게 확장할 수 있는 구조를 갖추고 있습니다. 사용자는 필요에 따라 새로운 기능을 추가하거나 기존 기능을 수정할 수 있습니다.
- 데이터 추출: Scrapy는 XPath와 CSS 선택자를 사용하여 HTML 및 XML에서 데이터를 추출할 수 있습니다. 이를 통해 원하는 데이터를 정확하고 효율적으로 선택할 수 있습니다.
- 비동기 처리: Twisted, 비동기 네트워킹 프레임워크를 사용하여 설계된 Scrapy는 요청을 비동기적으로 처리합니다. 이는 동시에 여러 웹 페이지를 크롤링할 수 있게 하여 성능을 향상시킵니다.
- 로봇 배제 표준 준수: Scrapy는 웹사이트의
robots.txt
정책을 존중하며 이에 따라 크롤링을 조정할 수 있습니다. - 항목 파이프라인: 데이터 정제, 유효성 검사 또는 데이터베이스 저장과 같은 추가 처리를 위해 크롤링된 데이터를 항목 파이프라인으로 보낼 수 있습니다.
- 플러그인 지원: 다양한 내장 확장 기능과 미들웨어를 통해 사용자 정의가 가능하며, 이를 통해 요청과 응답을 처리하는 방식을 조정할 수 있습니다.
- 쉬운 배포: Scrapy Cloud와 같은 플랫폼을 사용하여 Scrapy 프로젝트를 쉽게 배포하고 관리할 수 있습니다.
Scrapy의 구성 요소
- Spiders: 웹사이트를 크롤링하고, 데이터를 추출하는 규칙을 정의합니다.
- Items: 추출된 데이터를 저장하는 컨테이너입니다.
- Item Pipeline: 데이터 처리 라인으로, 데이터 정제 및 저장 과정을 담당합니다.
- Downloader: 웹 페이지의 다운로드를 담당하며, HTTP 요청을 처리합니다.
- Scheduler: 요청을 관리하고 순서를 정하는 역할을 합니다.
사용 예
Scrapy 프로젝트를 시작하고, 스파이더를 생성하여 웹 페이지에서 데이터를 추출하는 간단한 예는 다음과 같습니다.
import scrapy
class MySpider(scrapy.Spider):
name = 'example_spider'
start_urls = ['https://example.com']
def parse(self, response):
for item in response.css('div.quote'):
yield {
'text': item.css('span.text::text').get(),
'author': item.css('span small.author::text').get(),
}
이 코드는 https://example.com
에서 시작하여 각 페이지의 특정 요소를 찾아 데이터를 추출하고 딕셔너리 형태로 저장합니다. Scrapy는 이 과정을 매우 효율적으로 처리할 수 있습니다.
주요 구성 요소
Scrapy는 복잡한 웹 크롤링 및 데이터 추출 작업을 위한 강력한 프레임워크입니다. 이 프레임워크는 여러 구성 요소로 이루어져 있으며, 각 구성 요소는 특정 역할을 수행합니다. 여기서는 Scrapy의 주요 구성 요소들과 관련 API를 자세히 살펴보겠습니다.
1. Spiders
역할: 스파이더(Spider)는 크롤링 작업의 핵심으로, 어떤 웹사이트를 크롤링할 것인지, 어떤 데이터를 추출할 것인지를 정의합니다. 스파이더(Spider)는 start_urls 리스트에 크롤링을 시작할 URL을 지정하고, 웹페이지로부터 데이터를 추출하기 위해 parse 메서드를 구현합니다.
API:
scrapy.Spider
: 가장 기본적인 Spider 클래스입니다.start_requests()
: Spider가 크롤링을 시작할 때 호출되는 메소드로, 시작 URL을 생성합니다.parse(response)
: 웹 페이지의 응답을 처리하고 데이터를 추출하는 기본 콜백 함수입니다.
import scrapy
class NewsSpider(scrapy.Spider):
name = 'news'
start_urls = ['https://news.example.com']
def parse(self, response):
for article in response.css('div.article'):
yield {
'title': article.css('h2.title::text').get(),
'summary': article.css('p.summary::text').get()
}
2. Items
역할: 추출한 데이터를 저장하기 위한 컨테이너입니다. Scrapy에서는 파이썬 클래스로 아이템을 정의하며, 각 필드는 scrapy.Field()를 사용하여 선언됩니다.
API:
scrapy.Item
: 데이터를 저장할 필드를 정의하는 클래스입니다.scrapy.Field()
: Item 내의 개별 필드를 정의할 때 사용됩니다.
import scrapy
class Article(scrapy.Item):
title = scrapy.Field()
summary = scrapy.Field()
3. Item Pipeline
역할: 아이템 파이프라인은 스파이더로부터 추출된 아이템을 처리하는 과정을 정의합니다. 이 파이프라인을 통해 데이터 검증, 중복 제거, 데이터베이스 저장 등의 작업을 수행할 수 있습니다.
API:
process_item(self, item, spider)
: 각 아이템을 처리하는 메소드입니다. 아이템과 Spider 객체를 인수로 받습니다.
class NewsPipeline:
def process_item(self, item, spider):
# 데이터베이스에 아이템 저장 로직
return item
4. Middlewares
역할: Downloader Middleware와 Spider Middleware가 있습니다. 이들은 요청 및 응답을 가로채어 사용자 정의 코드를 실행할 수 있게 해 줍니다.
API:
process_request(self, request, spider)
: 요청을 서버로 보내기 전에 호출됩니다.process_response(self, request, response, spider)
: 서버로부터의 응답을 받았을 때 호출됩니다.
5. Scheduler
역할: Scheduler는 Spider로부터 생성된 요청을 관리하고, 다운로더로 보내는 순서를 결정합니다.
API:
- Scrapy는 기본적으로 자체 스케줄러를 사용합니다. 이는 내부적으로 메모리 기반의 우선순위 큐를 사용하여 요청을 관리합니다.
6. Downloader
역할: Downloader는 웹 페이지의 내용을 실제로 다운로드하는 구성 요소입니다. HTTP 요청을 실행하고 응답을 받아 Spider로 전달합니다.
API:
- Downloader는 일반적으로 사용자가 직접 접근하거나 수정하지 않으며, Scrapy의 내부 구성 요소로 작동합니다.
이 구성 요소들을 통해 Scrapy는 강력하고 유연한 웹 크롤링 솔루션을 제공합니다. 각 구성 요소는 특정 역할을 담당하며, 이를 조합함으로써 복잡한 크롤링 작업도 효과적으로 관리할 수 있습니다. 자세한 API 사용법과 예제는 Scrapy의 공식 문서에서 찾아볼 수 있습니다. 이 문서는 각 API의 상세한 설명과 사용 방법을 제공합니다.
'Web Crawling for Beginners' 카테고리의 다른 글
Scrapy, logging (0) | 2024.05.16 |
---|---|
Scrapy, A multi-page website into An Excel file (0) | 2024.05.16 |
Selenium: 웹 자동화 및 자바스크립트 처리 (0) | 2024.05.09 |
웹 크롤링에 robots.txt 적용하기 (0) | 2024.04.30 |
학습사이트 http://books.toscrape.com 크롤링 결과 DB 저장 (0) | 2024.04.26 |