Rumah >pembangunan bahagian belakang >Tutorial Python >Scrapy in action: merangkak data filem Douban dan rating kedudukan populariti
Scrapy ialah rangka kerja Python sumber terbuka yang digunakan untuk merangkak data dengan cepat dan cekap. Dalam artikel ini, kami akan menggunakan Scrapy untuk merangkak data dan menilai populariti filem Douban.
Mula-mula, kita perlu memasang Scrapy. Anda boleh memasang Scrapy dengan menaip arahan berikut pada baris arahan:
pip install scrapy
Seterusnya, kami akan mencipta projek Scrapy. Pada baris arahan, masukkan arahan berikut:
scrapy startproject doubanmovie
Ini akan mencipta projek Scrapy bernama doubanmovie. Kami kemudian akan pergi ke direktori projek dan mencipta Spider yang dipanggil douban.py. Pada baris arahan, masukkan arahan berikut:
cd doubanmovie scrapy genspider douban douban.com
Sekarang, kami mempunyai Spider sedia untuk digunakan. Seterusnya, kami akan menentukan tingkah laku labah-labah untuk mendapatkan data yang diperlukan.
Kami akan menggunakan Spider untuk merangkak data filem Douban. Secara khusus, kami akan mendapat maklumat berikut:
Buka fail douban.py , kami akan menambah kod berikut:
import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): movie_list = response.xpath('//div[@class="item"]') for movie in movie_list: yield { 'name': movie.xpath('.//span[@class="title"]/text()').get(), 'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(), 'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(), 'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(), 'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(), 'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(), 'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(), 'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(), 'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(), 'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(), }
Dalam kod ini, kami menggunakan XPath untuk memilih maklumat yang perlu kami dapatkan. Kami menggunakan hasil untuk menjana maklumat ini dan mengembalikannya kepada pengguna.
Jika kami menjalankan Spider kami sekarang (jalankan arahan berikut: scrapy crawl douban), ia akan merangkak data untuk 250 filem pertama dan mengembalikannya ke baris arahan.
Kini, kami telah berjaya memperoleh data 250 filem teratas. Seterusnya, kami akan mendapat kedudukan populariti rating mereka.
Kita perlu mencipta Spider baharu terlebih dahulu untuk merangkak senarai TOP250 filem Douban. Kami akan menggunakan senarai ini untuk mendapatkan kedudukan filem.
Dalam fail douban.py, kami akan menambah kod berikut:
import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): movie_list = response.xpath('//div[@class="item"]') for movie in movie_list: yield { 'name': movie.xpath('.//span[@class="title"]/text()').get(), 'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(), 'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(), 'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(), 'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(), 'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(), 'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(), 'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(), 'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(), 'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(), } next_page = response.xpath('//span[@class="next"]/a/@href') if next_page: url = response.urljoin(next_page[0].get()) yield scrapy.Request(url, callback=self.parse)
Dalam kod tersebut, kami menggunakan pembolehubah yang dipanggil next_page untuk menyemak sama ada kami telah mencapai halaman terakhir. Jika kami belum sampai ke halaman terakhir, kami terus merangkak ke halaman seterusnya.
Seterusnya, kita perlu mengemas kini kaedah parse untuk mendapatkan ranking filem. Kami akan menggunakan fungsi enumerate Python untuk mengaitkan kedudukan dengan setiap filem.
Dalam fail douban.py, kami akan menggantikan kaedah parse asal:
def parse(self, response): movie_list = response.xpath('//div[@class="item"]') for i, movie in enumerate(movie_list): yield { 'rank': i + 1, 'name': movie.xpath('.//span[@class="title"]/text()').get(), 'director': movie.xpath('.//div[@class="bd"]/p/text()[1]').get(), 'actors': movie.xpath('.//div[@class="bd"]/p/text()[2]').get(), 'genre': movie.xpath('.//div[@class="bd"]/p/text()[3]').get(), 'country': movie.xpath('.//div[@class="bd"]/p/text()[4]').get(), 'language': movie.xpath('.//div[@class="bd"]/p/text()[5]').get(), 'release_date': movie.xpath('.//div[@class="bd"]/p/text()[6]').get(), 'duration': movie.xpath('.//div[@class="bd"]/p/text()[7]').get(), 'rating': movie.xpath('.//span[@class="rating_num"]/text()').get(), 'num_reviews': movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').get(), } next_page = response.xpath('//span[@class="next"]/a/@href') if next_page: url = response.urljoin(next_page[0].get()) yield scrapy.Request(url, callback=self.parse)
Sekarang, jika kami menjalankan Spider kami sekali lagi, ia akan mendapat data untuk 250 filem pertama dan adakah Mereka akan dikembalikan ke baris arahan. Pada ketika ini, kita akan melihat kedudukan semua filem.
Scrapy ialah alat yang sangat berkuasa dan fleksibel untuk merangkak data dengan cepat dan cekap. Dalam artikel ini, kami telah berjaya menggunakan Scrapy untuk merangkak data dan menilai kedudukan populariti filem Douban.
Kami menggunakan kod Python dan XPath untuk mendapatkan maklumat secara selektif pada halaman web dan menggunakan pernyataan hasil untuk mengembalikannya kepada pengguna. Sepanjang proses, Scrapy menyediakan cara yang mudah dan berkesan untuk mengurus dan merangkak sejumlah besar data, membolehkan kami melakukan analisis dan pemprosesan data dengan cepat.
Atas ialah kandungan terperinci Scrapy in action: merangkak data filem Douban dan rating kedudukan populariti. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!