Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Rangka kerja scrapy dan integrasi pangkalan data: bagaimana untuk melaksanakan penyimpanan data dinamik?

Rangka kerja scrapy dan integrasi pangkalan data: bagaimana untuk melaksanakan penyimpanan data dinamik?

PHPz
PHPzasal
2023-06-22 10:35:191226semak imbas

Memandangkan jumlah data Internet terus meningkat, cara merangkak, memproses dan menyimpan data dengan cepat dan tepat telah menjadi isu utama dalam pembangunan aplikasi Internet. Sebagai rangka kerja perangkak yang cekap, rangka kerja Scrapy digunakan secara meluas dalam pelbagai senario rangkak data kerana kaedah rangkaknya yang fleksibel dan berkelajuan tinggi.

Walau bagaimanapun, hanya menyimpan data yang dirangkak ke fail tidak dapat memenuhi keperluan kebanyakan aplikasi. Kerana dalam aplikasi semasa, kebanyakan data disimpan, diambil dan dimanipulasi melalui pangkalan data. Oleh itu, cara mengintegrasikan rangka kerja Scrapy dengan pangkalan data untuk mencapai penyimpanan data yang pantas dan dinamik telah menjadi satu cabaran baharu.

Artikel ini akan menggabungkan kes sebenar untuk memperkenalkan cara rangka kerja Scrapy menyepadukan pangkalan data dan melaksanakan storan data dinamik untuk rujukan oleh pembaca yang memerlukan.

1. Persediaan

Sebelum memulakan pengenalan, artikel ini menganggap bahawa pembaca telah pun memahami pengetahuan asas bahasa Python dan beberapa kaedah menggunakan rangka kerja Scrapy, dan boleh menggunakan bahasa Python untuk mencipta pangkalan data mudah beroperasi. Jika anda tidak biasa dengan ini, adalah disyorkan untuk mempelajari pengetahuan yang berkaitan terlebih dahulu dan kemudian membaca artikel ini.

2. Pilih pangkalan data

Sebelum mula mengintegrasikan rangka kerja Scrapy dengan pangkalan data, kita perlu terlebih dahulu memilih pangkalan data yang sesuai untuk menyimpan data yang kita crawl. Pangkalan data yang biasa digunakan pada masa ini termasuk MySQL, PostgreSQL, MongoDB dan banyak pilihan lain.

Pangkalan data ini masing-masing mempunyai kelebihan dan kekurangan masing-masing, pilih mengikut keperluan anda. Sebagai contoh, apabila jumlah data adalah kecil, ia adalah lebih mudah untuk menggunakan pangkalan data MySQL, dan apabila penyimpanan data besar-besaran diperlukan, pangkalan data dokumen MongoDB adalah lebih sesuai.

3. Konfigurasikan maklumat sambungan pangkalan data

Sebelum operasi khusus, kami perlu mengkonfigurasi maklumat sambungan pangkalan data. Sebagai contoh, mengambil pangkalan data MySQL sebagai contoh, anda boleh menggunakan perpustakaan pymysql dalam Python untuk menyambung.

Dalam Scrapy, kami biasanya mengkonfigurasinya dalam tetapan.py:

MYSQL_HOST = 'localhost'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASSWORD = '123456'
MYSQL_DBNAME = 'scrapy_demo'

Dalam konfigurasi di atas, kami mengkonfigurasi nama hos, nombor port, nama pengguna dan kata laluan di mana pangkalan data MySQL terletak dan nama pangkalan data ini perlu diubah suai mengikut situasi sebenar.

4. Menulis Pipeline storan data

Dalam Scrapy, Pipeline storan data adalah kunci untuk merealisasikan storan data. Kita perlu menulis kelas Pipeline dan kemudian menetapkannya dalam fail konfigurasi Scrapy untuk menyimpan data.

Mengambil storan dalam MySQL sebagai contoh, kami boleh menulis kelas MySQLPipeline seperti berikut:

import pymysql

class MySQLPipeline(object):

    def open_spider(self, spider):
        self.conn = pymysql.connect(host=spider.settings.get('MYSQL_HOST'),
                                    port=spider.settings.get('MYSQL_PORT'),
                                    user=spider.settings.get('MYSQL_USER'),
                                    password=spider.settings.get('MYSQL_PASSWORD'),
                                    db=spider.settings.get('MYSQL_DBNAME'))
        self.cur = self.conn.cursor()

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

    def process_item(self, item, spider):
        sql = 'INSERT INTO articles(title, url, content) VALUES(%s, %s, %s)'
        self.cur.execute(sql, (item['title'], item['url'], item['content']))
        self.conn.commit()

        return item

Dalam kod di atas, kami mentakrifkan kelas MySQLPipeline untuk melaksanakan dok dengan pangkalan data MySQL, dan Tiga kaedah open_spider, close_spider dan process_item ditakrifkan.

Antaranya, kaedah open_spider dipanggil apabila seluruh perangkak mula berjalan untuk memulakan sambungan pangkalan data; kaedah close_spider dipanggil apabila perangkak tamat dan digunakan untuk menutup sambungan pangkalan data. Process_item ialah kaedah yang dipanggil setiap kali data dirangkak untuk menyimpan data dalam pangkalan data.

5. Dayakan Pipeline

Selepas melengkapkan penulisan Pipeline, kami juga perlu mendayakannya dalam tetapan fail konfigurasi Scrapy.py. Cuma tambahkan kelas Pipeline pada pembolehubah ITEM_PIPELINES, seperti ditunjukkan di bawah:

ITEM_PIPELINES = {
    'myproject.pipelines.MySQLPipeline': 300,
}

Dalam kod di atas, kami menambah kelas MySQLPipeline pada pembolehubah ITEM_PIPELINES dan menetapkan keutamaan kepada 300, menunjukkan bahawa Item sedang diproses , kelas Pipeline akan menjadi yang ketiga dipanggil.

6. Pengujian dan Operasi

Selepas melengkapkan semua konfigurasi, kami boleh menjalankan perangkak Scrapy dan menyimpan data yang ditangkap dalam pangkalan data MySQL. Langkah dan arahan khusus adalah seperti berikut:

1 Masukkan direktori di mana projek Scrapy terletak dan jalankan arahan berikut untuk mencipta projek Scrapy:

scrapy startproject myproject

2 uji fungsi penyimpanan data rangka kerja Scrapy , dan simpan data yang dirangkak ke dalam pangkalan data. Jalankan arahan berikut dalam direktori myproject:

scrapy genspider test_spider baidu.com

Arahan di atas akan menghasilkan Spider bernama test_spider untuk merangkak Baidu.

3. Tulis kod Spider Dalam direktori spiders pada direktori test_sprider, buka test_sprider.py dan tulis kod crawler:

import scrapy
from myproject.items import ArticleItem

class TestSpider(scrapy.Spider):
    name = "test"
    allowed_domains = ["baidu.com"]
    start_urls = [
        "https://www.baidu.com",
    ]

    def parse(self, response):
        item = ArticleItem()
        item['title'] = 'MySQL Pipeline测试'
        item['url'] = response.url
        item['content'] = 'Scrapy框架与MySQL数据库整合测试'
        yield item

Dalam kod di atas, kami mentakrifkan kelas TestSpider, diwarisi daripada Scrapy Kelas Spider terbina dalam digunakan untuk mengendalikan logik crawler. Dalam kaedah parse, kami membina objek Item dan menetapkan tiga kata kunci 'kandungan', 'url' dan 'tajuk'.

4. Cipta fail item dalam direktori myproject untuk mentakrifkan model data:

import scrapy

class ArticleItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()
    content = scrapy.Field()

Dalam kod di atas, kami mentakrifkan kelas ArticleItem untuk menyimpan data artikel yang dirangkak.

5. Kod ujian:

Dalam direktori test_spider, jalankan arahan berikut untuk menguji kod anda:

scrapy crawl test

Selepas melaksanakan perintah di atas, Scrapy akan memulakan perangkak TestSpider , dan simpan data yang ditangkap daripada halaman utama Baidu dalam pangkalan data MySQL.

7. Ringkasan

Artikel ini memperkenalkan secara ringkas cara rangka kerja Scrapy berintegrasi dengan pangkalan data dan melaksanakan storan data dinamik. Saya berharap artikel ini dapat membantu pembaca yang memerlukan, dan juga berharap pembaca dapat mengembangkan mengikut keperluan sebenar mereka untuk mencapai fungsi penyimpanan data dinamik yang lebih cekap dan lebih pantas.

Atas ialah kandungan terperinci Rangka kerja scrapy dan integrasi pangkalan data: bagaimana untuk melaksanakan penyimpanan data dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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