Rumah pembangunan bahagian belakang Tutorial Python Laksanakan rakaman dan analisis data berasaskan siri masa menggunakan Scrapy dan MongoDB

Laksanakan rakaman dan analisis data berasaskan siri masa menggunakan Scrapy dan MongoDB

Jun 22, 2023 am 10:18 AM
mongodb siri masa scrapy

Dengan perkembangan pesat data besar dan teknologi perlombongan data, orang ramai semakin menumpukan perhatian kepada rakaman dan analisis data siri masa. Dari segi perangkak web, Scrapy ialah rangka kerja perangkak yang sangat baik, dan MongoDB ialah pangkalan data NoSQL yang sangat baik. Artikel ini akan memperkenalkan cara menggunakan Scrapy dan MongoDB untuk melaksanakan rakaman dan analisis data berasaskan siri masa.

1. Pemasangan dan penggunaan Scrapy

Scrapy ialah rangka kerja perangkak web yang dilaksanakan dalam bahasa Python. Kami boleh memasang Scrapy menggunakan arahan berikut:

pip install scrapy
Salin selepas log masuk

Selepas pemasangan selesai, kami boleh menggunakan Scrapy untuk menulis perangkak kami. Di bawah ini kita akan belajar tentang penggunaan Scrapy melalui contoh crawler yang mudah.

1. Buat projek Scrapy

Dalam terminal baris arahan, buat projek Scrapy baharu melalui arahan berikut:

scrapy startproject scrapy_example
Salin selepas log masuk

Selepas projek dibuat, kita boleh menggunakan arahan berikut Masukkan direktori akar projek:

cd scrapy_example
Salin selepas log masuk

2. Tulis crawler

Kita boleh mencipta crawler baharu melalui arahan berikut:

scrapy genspider example www.example.com
Salin selepas log masuk

Contohnya di sini ialah nama perangkak tersuai, www.example.com ialah nama domain tapak web yang dirangkak. Scrapy akan menjana fail templat perangkak lalai dan kami boleh mengedit fail ini untuk menulis perangkak.

Dalam contoh ini, kami merangkak halaman web ringkas dan menyimpan kandungan teks pada halaman web ke fail teks. Kod perangkak adalah seperti berikut:

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}")
Salin selepas log masuk

3 Jalankan perangkak

Sebelum menjalankan perangkak, kami mula-mula menetapkan konfigurasi Scrapy. Dalam direktori akar projek, cari fail settings.py dan tetapkan ROBOTSTXT_OBEY kepada False supaya perangkak kami boleh merangkak mana-mana tapak web.

ROBOTSTXT_OBEY = False
Salin selepas log masuk

Seterusnya, kita boleh menjalankan perangkak melalui arahan berikut:

scrapy crawl example
Salin selepas log masuk

Selepas operasi selesai, kita boleh melihat fail example.txt dalam direktori akar projek, Ia menyimpan kandungan teks halaman web yang kami rangkak.

2. Pemasangan dan penggunaan MongoDB

MongoDB ialah pangkalan data NoSQL yang sangat baik. Kita boleh memasang MongoDB menggunakan arahan berikut:

sudo apt-get install mongodb
Salin selepas log masuk

Selepas pemasangan selesai, kita perlu memulakan perkhidmatan MongoDB. Masukkan arahan berikut dalam terminal baris arahan:

sudo service mongodb start
Salin selepas log masuk

Selepas berjaya memulakan perkhidmatan MongoDB, kami boleh mengendalikan data melalui MongoDB Shell.

1. Cipta pangkalan data

Masukkan arahan berikut dalam terminal baris arahan untuk menyambung ke pangkalan data MongoDB:

mongo
Salin selepas log masuk

Selepas sambungan berjaya, kita boleh menggunakan arahan berikut untuk mencipta Pangkalan Data baharu:

use scrapytest
Salin selepas log masuk

Paling keriput di sini ialah nama pangkalan data tersuai kami.

2. Cipta koleksi

Dalam MongoDB, kami menggunakan koleksi untuk menyimpan data. Kita boleh menggunakan arahan berikut untuk mencipta koleksi baharu:

db.createCollection("example")
Salin selepas log masuk

Contohnya di sini ialah nama koleksi tersuai kami.

3. Masukkan data

Dalam Python, kita boleh menggunakan perpustakaan pymongo untuk mengakses pangkalan data MongoDB. Kita boleh menggunakan arahan berikut untuk memasang pustaka pymongo:

pip install pymongo
Salin selepas log masuk

Selepas pemasangan selesai, kita boleh menggunakan kod berikut untuk memasukkan data:

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)
Salin selepas log masuk

Data di sini adalah data yang kami mahu untuk memasukkan, termasuk tajuk dan kandungan dua medan.

4. Data pertanyaan

Kita boleh menggunakan kod berikut untuk menanyakan data:

import pymongo

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

Syarat pertanyaan di sini ialah "tajuk": "contoh", yang bermaksud pertanyaan medan tajuk adalah sama dengan data contoh. Hasil pertanyaan akan merangkumi keseluruhan dokumen data dan kami boleh mendapatkan nilai medan kandungan melalui hasil["kandungan"].

3. Penggunaan gabungan Scrapy dan MongoDB

Dalam aplikasi perangkak sebenar, kita selalunya perlu menyimpan data yang dirangkak ke pangkalan data dan merekodkan siri masa data dan menganalisis. Gabungan Scrapy dan MongoDB boleh memenuhi keperluan ini dengan baik.

Dalam Scrapy, kami boleh menggunakan saluran paip untuk memproses data yang dirangkak dan menyimpan data ke MongoDB.

1. Cipta saluran paip

Kami boleh mencipta fail bernama pipelines.py dalam direktori akar projek Scrapy dan mentakrifkan saluran paip kami dalam fail ini. Dalam contoh ini, kami menyimpan data yang dirangkak ke MongoDB dan menambah medan cap masa untuk mewakili cap masa rekod data. Kodnya adalah seperti berikut:

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
Salin selepas log masuk

Saluran paip ini akan dipanggil setiap kali perangkak merangkak item. Kami menukar item yang dirangkak ke dalam kamus, menambah medan cap masa dan kemudian menyimpan keseluruhan kamus ke MongoDB.

2. Konfigurasikan saluran paip

Cari fail settings.py dalam direktori akar projek Scrapy, dan tetapkan ITEM_PIPELINES kepada saluran paip yang baru kami takrifkan:

rreee

The 300 di sini ialah Keutamaan saluran paip menunjukkan susunan pelaksanaan saluran paip di antara semua saluran paip.

3. Ubah suai kod perangkak

Ubah suai kod perangkak yang baru kami tulis dan hantar item ke saluran paip.

ITEM_PIPELINES = {
   "scrapy_example.pipelines.ScrapyExamplePipeline": 300,
}
Salin selepas log masuk

Di sini kami hanya merangkak kandungan teks pada halaman web dan menyimpan kandungan ke dalam medan teks. Scrapy akan menghantar item ini ke saluran paip yang ditentukan untuk diproses.

4. Data pertanyaan

Kini, kami boleh menyimpan data yang dirangkak ke MongoDB. Kita juga perlu melaksanakan rakaman dan analisis siri masa. Kami boleh menggunakan pertanyaan dan operasi pengagregatan MongoDB untuk mencapai ini.

Cari data dalam tempoh masa yang ditetapkan:

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()}
Salin selepas log masuk

Di sini kami dapati semua data untuk 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']}")
Salin selepas log masuk

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

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

Atas ialah kandungan terperinci Laksanakan rakaman dan analisis data berasaskan siri masa menggunakan Scrapy dan MongoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Regresi kuantil untuk ramalan kebarangkalian siri masa Regresi kuantil untuk ramalan kebarangkalian siri masa May 07, 2024 pm 05:04 PM

Jangan ubah maksud kandungan asal, perhalusi kandungan, tulis semula kandungan dan jangan teruskan. "Regression kuantil memenuhi keperluan ini, menyediakan selang ramalan dengan peluang yang dikira. Ia adalah teknik statistik yang digunakan untuk memodelkan hubungan antara pembolehubah peramal dan pembolehubah tindak balas, terutamanya apabila taburan bersyarat pembolehubah tindak balas adalah menarik Apabila. Tidak seperti regresi tradisional kaedah, regresi kuantil memfokuskan pada menganggar magnitud bersyarat pembolehubah bergerak balas dan bukannya min bersyarat "Rajah (A): Regresi kuantil Regresi kuantil ialah anggaran. Kaedah pemodelan untuk hubungan linear antara set regresi X dan kuantil. daripada pembolehubah yang dijelaskan Y. Model regresi yang sedia ada sebenarnya adalah kaedah untuk mengkaji hubungan antara pembolehubah yang dijelaskan dan pembolehubah penjelasan. Mereka memberi tumpuan kepada hubungan antara pembolehubah penjelasan dan pembolehubah yang dijelaskan

Perbezaan antara nodejs dan vuejs Perbezaan antara nodejs dan vuejs Apr 21, 2024 am 04:17 AM

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Apa yang perlu dilakukan jika navicat tamat tempoh Apa yang perlu dilakukan jika navicat tamat tempoh Apr 23, 2024 pm 12:12 PM

Penyelesaian untuk menyelesaikan isu tamat tempoh Navicat termasuk: memperbaharui lesen dan menyahpasang semula kemas kini automatik, hubungi Navicat Premium Essentials;

Adakah sukar untuk mempelajari nodej di bahagian hadapan? Adakah sukar untuk mempelajari nodej di bahagian hadapan? Apr 21, 2024 am 04:57 AM

Untuk pembangun bahagian hadapan, kesukaran mempelajari Node.js bergantung pada asas JavaScript mereka, pengalaman pengaturcaraan sisi pelayan, kebiasaan baris arahan dan gaya pembelajaran. Keluk pembelajaran termasuk modul peringkat permulaan dan peringkat lanjutan yang memfokuskan pada konsep asas, seni bina bahagian pelayan, penyepaduan pangkalan data dan pengaturcaraan tak segerak. Secara keseluruhan, mempelajari Node.js tidak sukar untuk pembangun yang mempunyai asas yang kukuh dalam JavaScript dan bersedia untuk melaburkan masa dan usaha, tetapi bagi mereka yang kurang pengalaman yang berkaitan, mungkin terdapat cabaran tertentu untuk diatasi.

Bagaimana untuk menyambungkan navicat ke mongodb Bagaimana untuk menyambungkan navicat ke mongodb Apr 24, 2024 am 11:27 AM

Untuk menyambung ke MongoDB menggunakan Navicat, anda perlu: Pasang Navicat Buat sambungan MongoDB: a Masukkan nama sambungan, alamat hos dan port b Masukkan maklumat pengesahan (jika perlu) Tambah sijil SSL (jika perlu) Sahkan sambungan Simpan sambungan

Apakah modul yang biasa digunakan dalam nodejs? Apakah modul yang biasa digunakan dalam nodejs? Apr 21, 2024 am 04:34 AM

Modul yang paling biasa digunakan dalam Node.js termasuk: Modul sistem fail untuk operasi fail Modul rangkaian untuk komunikasi rangkaian Modul aliran untuk memproses aliran data Modul pangkalan data untuk berinteraksi dengan pangkalan data Modul utiliti lain seperti penyulitan, rentetan pertanyaan Penghuraian rentetan dan rangka kerja HTTP

Apakah kegunaan net4.0 Apakah kegunaan net4.0 May 10, 2024 am 01:09 AM

.NET 4.0 digunakan untuk mencipta pelbagai aplikasi dan ia menyediakan pemaju aplikasi dengan ciri yang kaya termasuk: pengaturcaraan berorientasikan objek, fleksibiliti, seni bina berkuasa, penyepaduan pengkomputeran awan, pengoptimuman prestasi, perpustakaan yang luas, keselamatan, Kebolehskalaan, akses data dan mudah alih sokongan pembangunan.

Pangkalan data apakah yang baik untuk nodejs? Pangkalan data apakah yang baik untuk nodejs? Apr 21, 2024 am 05:06 AM

Untuk aplikasi Node.js, memilih pangkalan data bergantung pada keperluan aplikasi. Pangkalan data NoSQL MongoDB menyediakan fleksibiliti, Redis menyediakan konkurensi tinggi, Cassandra mengendalikan data siri masa, dan Elasticsearch dikhususkan untuk mencari. Pangkalan data SQL MySQL mempunyai prestasi cemerlang, PostgreSQL kaya dengan ciri, SQLite ringan, dan Pangkalan Data Oracle adalah komprehensif. Apabila memilih, pertimbangkan jenis data, pertanyaan, prestasi, transaksi, ketersediaan, pelesenan dan kos.

See all articles