빅데이터와 데이터 마이닝 기술의 급속한 발전으로 사람들은 시계열 데이터의 기록과 분석에 점점 더 많은 관심을 기울이고 있습니다. 웹 크롤러 측면에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!