scrapy是一个开源的python框架,用于快速高效地爬取数据。在本文中,我们将使用scrapy爬取豆瓣电影的数据和评分热度排名。
准备工作
首先,我们需要安装Scrapy。您可以在命令行中输入以下命令来安装Scrapy:
pip install scrapy
登录后复制
接下来,我们将创建一个Scrapy项目。在命令行中,输入以下命令:
scrapy startproject doubanmovie
登录后复制
这将创建一个名为doubanmovie的Scrapy项目。然后,我们将进入项目目录并创建一个名为douban.py的Spider。在命令行中,输入以下命令:
cd doubanmoviescrapy genspider douban douban.com
登录后复制
现在,我们已经有了一个可以使用的Spider。接下来,我们将定义Spider的行为以获取所需的数据。
爬取电影数据
我们将使用Spider来爬取豆瓣电影的数据。具体来说,我们将获取以下信息:
电影名称导演演员类型国家语言上映日期片长评分评价人数
打开douban.py文件,我们将添加以下代码:
import scrapyclass 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 scrapyclass 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实战:爬取豆瓣电影数据和评分热度排名的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2232209.html