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
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
Selepas projek dibuat, kita boleh menggunakan arahan berikut Masukkan direktori akar projek:
cd scrapy_example
2. Tulis crawler
Kita boleh mencipta crawler baharu melalui arahan berikut:
scrapy genspider example www.example.com
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}")
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
Seterusnya, kita boleh menjalankan perangkak melalui arahan berikut:
scrapy crawl example
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
Selepas pemasangan selesai, kita perlu memulakan perkhidmatan MongoDB. Masukkan arahan berikut dalam terminal baris arahan:
sudo service mongodb start
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
Selepas sambungan berjaya, kita boleh menggunakan arahan berikut untuk mencipta Pangkalan Data baharu:
use scrapytest
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")
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
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)
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"])
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
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:
rreeeThe 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, }
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()}
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']}")
这里我们使用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!