Dengan perkembangan teknologi Internet yang berterusan, teknologi crawler juga telah digunakan secara meluas. Teknologi crawler secara automatik boleh merangkak data di Internet dan menyimpannya dalam pangkalan data, memberikan kemudahan untuk analisis data dan perlombongan data. Sebagai rangka kerja perangkak yang sangat terkenal dalam Python, Scrapy dilengkapi dengan beberapa templat perangkak biasa, yang boleh merangkak data dengan cepat pada tapak web sasaran dan menyimpannya secara automatik ke pangkalan data setempat atau awan. Artikel ini akan memperkenalkan cara menggunakan templat perangkak Scrapy sendiri untuk merangkak data dan cara membersihkan, menghuraikan dan menyimpan data semasa proses rangkak.
1. Pengenalan kepada templat perangkak Scrapy
Scrapy disertakan dengan beberapa templat perangkak, termasuk templat asas Spider, templat CrawlSpider dan templat XmlFeedSpider. Templat labah-labah ialah templat perangkak yang paling asas Kelebihannya ialah ia mempunyai pelbagai aplikasi dan mudah digunakan. Templat CrawlSpider ialah templat perangkak berasaskan peraturan yang boleh merangkak pautan berbilang peringkat dengan cepat dan menyokong peraturan tersuai. Templat XmlFeedSpider ialah templat perangkak yang sesuai untuk format XML. Menggunakan templat ini untuk merangkak data boleh mengurangkan kesukaran pembangunan untuk pengaturcara dan meningkatkan kecekapan merangkak.
2. Aplikasi templat perangkak Scrapy
Berikut ialah contoh praktikal untuk menggambarkan cara menggunakan templat Spider Scrapy sendiri untuk merangkak data. Tapak web sasaran yang akan kami rangkak ialah tapak web maklumat filem, dan maklumat filem terkini disenaraikan di halaman utama tapak web tersebut. Kami perlu merangkak nama filem, pengarah, pelakon, penilaian dan maklumat lain dari tapak web ini dan menyimpannya ke pangkalan data tempatan.
Mula-mula, anda perlu membuka tetingkap baris arahan, beralih ke direktori kerja sasaran, dan kemudian masukkan arahan berikut:
scrapy startproject movies
Arahan ini Projek Scrapy bernama filem akan dibuat Direktori projek akan mengandungi subdirektori bernama labah-labah, yang digunakan untuk meletakkan program perangkak.
Dalam direktori projek, gunakan arahan berikut untuk mencipta Spider bernama movie_spider:
scrapy genspider movie_spider www.movies.com
Arahan ini akan Menjana secara automatik program berdasarkan templat Spider, di mana www.movies.com mewakili nama domain tapak web sasaran. Dalam direktori spiders, fail bernama movie_spider.py akan muncul dengan kandungan berikut:
import scrapy class MovieSpider(scrapy.Spider): name = 'movie_spider' allowed_domains = ['www.movies.com'] start_urls = ['http://www.movies.com/'] def parse(self, response): pass
Ini ialah program Spider yang paling asas. Antaranya, nama mewakili nama perangkak, allowed_domains mewakili senarai nama domain yang dibenarkan untuk dirangkak dan start_urls mewakili senarai URL mula merangkak. Dalam kaedah parse, kita perlu menulis kod untuk menghurai dan merebut data.
Kita perlu menulis kod untuk menangkap dan menghuraikan data tapak web sasaran daripada objek tindak balas. Untuk tapak web maklumat filem yang baru disebut, kami boleh menggunakan pemilih XPath atau CSS untuk mencari elemen pada halaman. Dengan mengandaikan bahawa nama filem disimpan dalam elemen div dengan nama filem kelas pada halaman, maka kita boleh menggunakan kod berikut untuk mengekstrak semua nama filem:
def parse(self, response): movies = response.xpath('//div[@class="movie-name"]/text()').extract() for movie in movies: yield {'name': movie}
Di sini, kami menggunakan sintaks XPath untuk mencari Semua div elemen dengan nama filem kelas digunakan, dan kaedah ekstrak digunakan untuk mengekstrak kandungan teks dalam elemen. Seterusnya, kami menggunakan gelung for untuk menghasilkan setiap nama filem sebagai output penjana.
Begitu juga, kami boleh mencari elemen lain yang kami minati melalui pemilih XPath atau CSS. Sebagai contoh, maklumat pengarah dan pelakon boleh disimpan dalam elemen div dengan pengarah kelas, dan maklumat penarafan boleh disimpan dalam elemen div dengan kadar kelas.
Dalam program Spider, kita perlu menulis kod untuk menyimpan data yang ditangkap ke pangkalan data setempat atau awan. Scrapy menyokong menyimpan data ke pelbagai pangkalan data yang berbeza, termasuk MySQL, PostgreSQL, MongoDB, dll.
Sebagai contoh, kami boleh menggunakan pangkalan data MySQL untuk menyimpan maklumat filem. Dalam direktori spiders, kita boleh mencipta fail bernama mysql_pipeline.py, yang mengandungi kod berikut:
import pymysql class MysqlPipeline(object): def __init__(self): self.conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='movie_db', charset='utf8') def process_item(self, item, spider): cursor = self.conn.cursor() sql = "INSERT INTO movie(name, director, actors, rate) VALUES(%s, %s, %s, %s)" cursor.execute(sql, (item['name'], item['director'], item['actors'], item['rate'])) self.conn.commit() def __del__(self): self.conn.close()
Program ini akan menyimpan data pelaksanaan ke pangkalan data MySQL, di mana movie_db ialah nama pangkalan data dan filem jadual akan mengandungi Empat medan nama, pengarah, pelakon dan kadar digunakan untuk menyimpan nama filem, pengarah, pelakon dan maklumat penilaian. Kaedah process_item digunakan untuk menyimpan item yang dihasilkan dalam program Spider ke pangkalan data.
Untuk menggunakan fail mysql_pipeline.py, kami juga perlu menambah konfigurasi berikut dalam fail settings.py:
ITEM_PIPELINES = { 'movies.spiders.mysql_pipeline.MysqlPipeline': 300 }
Di sini, 'movies.spiders.mysql_pipeline.MysqlPipeline' menentukan lokasi fail mysql_pipeline.py dan nama kelas. Nombor 300 menunjukkan keutamaan pemprosesan data Semakin kecil bilangannya, semakin tinggi keutamaannya.
Dalam direktori spiders, laksanakan arahan berikut untuk menjalankan program Scrapy:
scrapy crawl movie_spider
Arahan ini akan memulakan movie_spider Program crawler mula merangkak data tapak web sasaran dan menyimpannya ke dalam pangkalan data MySQL.
3. Ringkasan
Artikel ini memperkenalkan cara menggunakan templat perangkak Scrapy sendiri untuk merangkak data, termasuk templat Spider, templat CrawlSpider dan templat XmlFeedSpider. Kami mengambil contoh praktikal untuk menggambarkan cara menggunakan templat Spider untuk menangkap dan menghuraikan data, dan menyimpan hasilnya ke pangkalan data MySQL. Menggunakan Scrapy untuk penangkapan data boleh meningkatkan kecekapan dan kualiti pengumpulan data dengan sangat baik, dan memberikan sokongan kukuh untuk analisis data seterusnya, perlombongan data dan kerja lain.
Atas ialah kandungan terperinci Scrapy ialah aplikasi mengikis data yang disertakan dengan templat perangkak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!