Rumah >pembangunan bahagian belakang >Tutorial Python >Scrapy in action: merangkak data filem Douban dan rating kedudukan populariti

Scrapy in action: merangkak data filem Douban dan rating kedudukan populariti

WBOY
WBOYasal
2023-06-22 13:49:402460semak imbas

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.

  1. Persediaan

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.

  1. Data filem merangkak

Kami akan menggunakan Spider untuk merangkak data filem Douban. Secara khusus, kami akan mendapat maklumat berikut:

  • Nama Filem
  • Pengarah
  • Pelakon
  • Genre
  • Negara
  • Bahasa
  • Tarikh keluaran
  • Panjang
  • Rating
  • Bilangan penyemak

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.

  1. Dapatkan kedudukan populariti rating

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.

  1. Kesimpulan

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!

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