>  기사  >  백엔드 개발  >  Scrapy 및 MongoDB를 사용하여 시계열 기반 데이터 기록 및 분석 구현

Scrapy 및 MongoDB를 사용하여 시계열 기반 데이터 기록 및 분석 구현

WBOY
WBOY원래의
2023-06-22 10:18:171684검색

빅데이터와 데이터 마이닝 기술의 급속한 발전으로 사람들은 시계열 데이터의 기록과 분석에 점점 더 많은 관심을 기울이고 있습니다. 웹 크롤러 측면에서 Scrapy는 매우 훌륭한 크롤러 프레임워크이고 MongoDB는 매우 훌륭한 NoSQL 데이터베이스입니다. 이 기사에서는 Scrapy와 MongoDB를 사용하여 시계열 기반 데이터 기록 및 분석을 구현하는 방법을 소개합니다.

1. Scrapy 설치 및 사용

Scrapy는 Python 언어로 구현된 웹 크롤러 프레임워크입니다. 다음 명령을 사용하여 Scrapy를 설치할 수 있습니다.

pip install scrapy

설치가 완료된 후 Scrapy를 사용하여 크롤러를 작성할 수 있습니다. 아래에서는 Scrapy의 사용법을 이해하기 위해 간단한 크롤러 예제를 사용합니다.

1. Scrapy 프로젝트 만들기

명령줄 터미널에서 다음 명령을 통해 새 Scrapy 프로젝트를 만듭니다.

scrapy startproject scrapy_example

프로젝트가 생성된 후 다음 명령을 통해 프로젝트의 루트 디렉터리에 들어갈 수 있습니다.

cd scrapy_example

2. 크롤러 작성

다음 명령을 사용하여 새 크롤러를 만들 수 있습니다.

scrapy genspider example www.example.com

여기의 예는 사용자 정의된 크롤러 이름이고 www.example.com은 크롤링된 웹사이트의 도메인 이름입니다. Scrapy는 기본 크롤러 템플릿 파일을 생성하여 이 파일을 편집하여 크롤러를 작성할 수 있습니다.

이 예에서는 간단한 웹 페이지를 크롤링하고 웹 페이지의 텍스트 콘텐츠를 텍스트 파일에 저장합니다. 크롤러 코드는 다음과 같습니다.

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = ["https://www.example.com/"]

    def parse(self, response):
        filename = "example.txt"
        with open(filename, "w") as f:
            f.write(response.text)
        self.log(f"Saved file {filename}")

3. 크롤러 실행

크롤러를 실행하기 전에 먼저 Scrapy 구성을 설정합니다. 프로젝트의 루트 디렉터리에서 settings.py 파일을 찾아 ROBOTSTXT_OBEY를 False로 설정하면 크롤러가 모든 웹사이트를 크롤링할 수 있습니다.

ROBOTSTXT_OBEY = False

다음으로 다음 명령을 통해 크롤러를 실행할 수 있습니다.

scrapy crawl example

작업이 완료되면 프로젝트의 루트 디렉터리에서 우리가 크롤링한 텍스트 콘텐츠가 포함된 example.txt 파일을 볼 수 있습니다. .

2. MongoDB 설치 및 사용

MongoDB는 매우 뛰어난 NoSQL 데이터베이스입니다. 다음 명령을 사용하여 MongoDB를 설치할 수 있습니다.

sudo apt-get install mongodb

설치가 완료되면 MongoDB 서비스를 시작해야 합니다. 명령줄 터미널에 다음 명령을 입력합니다.

sudo service mongodb start

MongoDB 서비스를 성공적으로 시작한 후 MongoDB Shell을 통해 데이터를 작업할 수 있습니다.

1. 데이터베이스 생성

MongoDB 데이터베이스에 연결하려면 명령줄 터미널에 다음 명령을 입력하세요.

mongo

연결에 성공한 후 다음 명령을 사용하여 새 데이터베이스를 생성할 수 있습니다. scrapytest는 사용자 정의 데이터베이스 이름입니다.

2. 컬렉션 만들기

MongoDB에서는 컬렉션을 사용하여 데이터를 저장합니다. 다음 명령을 사용하여 새 컬렉션을 만들 수 있습니다.

use scrapytest

여기의 예는 사용자 정의 컬렉션 이름입니다.

3. 데이터 삽입

Python에서는 pymongo 라이브러리를 사용하여 MongoDB 데이터베이스에 액세스할 수 있습니다. 다음 명령을 사용하여 pymongo 라이브러리를 설치할 수 있습니다.

db.createCollection("example")

설치가 완료된 후 다음 코드를 사용하여 데이터를 삽입할 수 있습니다.

pip install pymongo

여기의 데이터는 두 필드 제목을 포함하여 삽입하려는 데이터입니다. 그리고 내용.

4. 데이터 쿼리

다음 코드를 사용하여 데이터를 쿼리할 수 있습니다.

import pymongo

client = pymongo.MongoClient(host="localhost", port=27017)
db = client["scrapytest"]
collection = db["example"]
data = {"title": "example", "content": "Hello World!"}
collection.insert_one(data)

여기서 쿼리 조건은 "title": "example"입니다. 이는 제목 필드가 example과 동일한 데이터를 쿼리한다는 의미입니다. 쿼리 결과에는 전체 데이터 문서가 포함되며, result["content"]를 통해 콘텐츠 필드의 값을 가져올 수 있습니다.

3. Scrapy와 MongoDB의 결합

실제 크롤러 애플리케이션에서는 크롤링된 데이터를 데이터베이스에 저장하고 시계열로 데이터를 기록하고 분석해야 하는 경우가 많습니다. Scrapy와 MongoDB의 조합은 이러한 요구 사항을 잘 충족할 수 있습니다.

Scrapy에서는 파이프라인을 사용하여 크롤링된 데이터를 처리하고 데이터를 MongoDB에 저장할 수 있습니다.

1. 파이프라인 생성

Scrapy 프로젝트의 루트 디렉터리에 파이프라인.py라는 파일을 생성하고 이 파일에 파이프라인을 정의할 수 있습니다. 이 예에서는 크롤링된 데이터를 MongoDB에 저장하고 데이터 레코드의 타임스탬프를 나타내는 타임스탬프 필드를 추가합니다. 코드는 다음과 같습니다.

import pymongo

client = pymongo.MongoClient(host="localhost", port=27017)
db = client["scrapytest"]
collection = db["example"]
result = collection.find_one({"title": "example"})
print(result["content"])

이 파이프라인은 크롤러가 항목을 크롤링할 때마다 호출됩니다. 크롤링된 항목을 사전으로 변환하고 타임스탬프 필드를 추가한 다음 전체 사전을 MongoDB에 저장합니다.

2. 파이프라인 구성

Scrapy 프로젝트의 루트 디렉터리에서 settings.py 파일을 찾고 ITEM_PIPELINES를 방금 정의한 파이프라인으로 설정합니다.

import pymongo
from datetime import datetime

class ScrapyExamplePipeline:
    def open_spider(self, spider):
        self.client = pymongo.MongoClient("localhost", 27017)
        self.db = self.client["scrapytest"]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        collection = self.db[spider.name]
        item["timestamp"] = datetime.now()
        collection.insert_one(dict(item))
        return item

여기서 300은 파이프라인의 우선순위입니다. 파이프라인은 의 모든 파이프라인 실행 순서에 있습니다.

3. 크롤러 코드 수정

방금 작성한 크롤러 코드를 수정하고 항목을 파이프라인에 전달합니다.

ITEM_PIPELINES = {
   "scrapy_example.pipelines.ScrapyExamplePipeline": 300,
}

여기에서는 웹페이지의 텍스트 콘텐츠를 크롤링하고 해당 콘텐츠를 텍스트 필드에 저장했습니다. Scrapy는 처리를 위해 이 항목을 정의된 파이프라인에 전달합니다.

4. 데이터 쿼리

이제 크롤링된 데이터를 MongoDB에 저장할 수 있습니다. 또한 시계열 기록 및 분석을 구현해야 합니다. MongoDB의 쿼리 및 집계 작업을 사용하여 이를 수행할 수 있습니다.

특정 기간의 데이터 찾기:

import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    start_urls = ["https://www.example.com/"]

    def parse(self, response):
        for text in response.css("p::text"):
            yield {"text": text.extract()}

여기에서 2021년의 모든 데이터를 찾을 수 있습니다.

统计每个小时内的记录数:

import pymongo

client = pymongo.MongoClient("localhost", 27017)
db = client["scrapytest"]
collection = db["example"]
pipeline = [
    {"$group": {"_id": {"$hour": "$timestamp"}, "count": {"$sum": 1}}},
    {"$sort": {"_id": 1}},
]
result = collection.aggregate(pipeline)
for item in result:
    print(f"{item['_id']}: {item['count']}")

这里我们使用MongoDB的聚合操作来统计每个小时内的记录数。

通过Scrapy和MongoDB的结合使用,我们可以方便地实现时间序列的数据记录和分析。这种方案的优点是具有较强的扩展性和灵活性,可以适用于各种不同的应用场景。不过,由于本方案的实现可能涉及到一些较为复杂的数据结构和算法,所以在实际应用中需要进行一定程度的优化和调整。

위 내용은 Scrapy 및 MongoDB를 사용하여 시계열 기반 데이터 기록 및 분석 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.