scrapy是一个开源的python框架,用于快速高效地爬取数据。在本文中,我们将使用scrapy爬取豆瓣电影的数据和评分热度排名。
首先,我们需要安装Scrapy。您可以在命令行中输入以下命令来安装Scrapy:
pip install scrapy
接下来,我们将创建一个Scrapy项目。在命令行中,输入以下命令:
scrapy startproject doubanmovie
这将创建一个名为doubanmovie的Scrapy项目。然后,我们将进入项目目录并创建一个名为douban.py的Spider。在命令行中,输入以下命令:
cd doubanmovie scrapy genspider douban douban.com
现在,我们已经有了一个可以使用的Spider。接下来,我们将定义Spider的行为以获取所需的数据。
我们将使用Spider来爬取豆瓣电影的数据。具体来说,我们将获取以下信息:
打开douban.py文件,我们将添加以下代码:
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(),
}在这个代码中,我们使用XPath来选取我们需要获取的信息。我们使用yield来生成这些信息,并使用return来将它们返回到用户。
如果我们现在运行我们的Spider(运行以下命令:scrapy crawl douban),它将爬取前250部电影的数据,并将它们返回到命令行中。
现在,我们已经成功地获取了前250部电影的数据。接下来,我们将获取它们的评分热度排名。
我们需要先创建一个新的Spider,来爬取豆瓣电影的TOP250列表。我们将使用此列表来获取电影的排名。
在douban.py文件中,我们将添加以下代码:
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)在代码中,我们使用了一个名为next_page的变量,来检查我们是否到达了最后一页。如果我们还没有到达最后一页,我们将继续爬取下一页。
接下来,我们需要更新parse方法,以获取电影的排名。我们将使用Python的enumerate函数来将排名与每部电影相关联。
在douban.py文件中,我们将替换原来的parse方法:
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)现在,如果我们再次运行我们的Spider,它将获取前250部电影的数据,并将它们返回到命令行中。此时,我们将看到所有电影的排名。
Scrapy是一种非常强大和灵活的工具,用于快速高效地爬取数据。在本文中,我们已经成功地使用Scrapy来爬取豆瓣电影的数据和评分热度排名。
我们使用Python代码和XPath来选择性获取网页上的信息,并使用yield语句来将其返回给用户。在整个过程中,Scrapy提供了一个简单而有效的方式来管理和爬取大量的数据,使我们能够快速地进行数据分析和处理。
以上就是Scrapy实战:爬取豆瓣电影数据和评分热度排名的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号