使用scrapy再次爬取猫眼前100榜单电影

本文介绍如何使用Scrapy框架抓取猫眼电影前100榜单的电影名称、主演、上映时间、评分和图片链接,并将图片保存至本地。通过浏览器开发者工具定位元素,利用XPath提取信息,涉及spider、item.py和settings.py的代码实现。
摘要由CSDN通过智能技术生成

前提:

记得去年5月份左右的时候写过一篇使用Requests方法来爬取猫眼榜单电影的文章,今天偶然翻到了这篇文章,又恰巧最近在学scrapy框架进行爬虫,于是决定饶有兴趣的使用scrapy框架再次进行爬取。

说明:

如图所示,这次爬取的猫眼榜单网页链接内容大致如下(图1-1),这次需要爬取的信息分别是电影名称、主演、上映时间、电影评分和电影图片链接,然后将获取的电影图片下载保存到本地,如图1-2所示。

                                                                                                                               图1-1

                                

                                                                                                                               图1-2 

爬虫解析:

1、首先使用谷歌浏览器打开网页,然后按下键盘“F12”进入开发者工具调试界面,选择左上角的箭头图标,然后鼠标移至一个电影名处,就可以定位到该元素源代码的具体位置,定位到元素的源代码之后,可以从源代码中读出改元素的属性,如图2-1所示: 

                                                          

                                                                                                                              图2-1

2、从上图可以看出,我们需要的信息隐藏在这个节点和属性值中,接下来就是如何获取到这些节点信息和属性值的问题,这里最简答的方法就是选择一个节点后,右击鼠标选择“Copy-Copy Xpath”,通过xpath方法来定位元素来获取信息。具体的xpath定位元素的使用方法,可自行百度进行学习。

代码:

spider文件

# -*- coding: utf-8 -*-
import scrapy
from maoyan.items import MaoyanItem
import urllib

class Top100Spider(scrapy.Spider):
    name = 'top_100'
    allowed_domains = ['trade.maoyan.co
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是用中文回复: scrapy是一个Python爬虫框架,可以用来爬取各种网站的数据。要爬取猫眼电影top100,可以先找到猫眼电影的网址,然后用scrapy爬虫程序来获取网页的HTML代码,再从HTML代码中提取出需要的数据,比如电影名称分、演员等等。最后将这些数据保存到本地文件或者数据库中。 ### 回答2: Scrapy是一个Python中的爬虫框架,能够帮助我们轻松地抓取互联网上数据并进行存储和分析。本文将介绍如何使用Scrapy爬取猫眼电影top100爬虫流程 1. 创建Scrapy项目 运行命令 scrapy startproject maoyan 2. 创建爬虫 运行命令 scrapy genspider maoyan_spider maoyan.com 3. 设置爬虫 打开 maoyan_spider.py,编辑 start_urls,修改如下 start_urls = ['https://maoyan.com/board/4'] 可见该网址是猫眼电影top100的首页,该网址最多显示10个电影项,如图所示: ![maoyan_top10](https://s3.ax1x.com/2021/01/31/y7Uju9.png) 需要在该页面下爬取电影详细信息,并翻页抓取完所有top100电影信息。在网页底部,我们可以看到“下一页”的按钮和网址,格式为 https://maoyan.com/board/4?offset=10 当offset值为10、20等时,可以显示top100中接下来的10个电影信息。 那么我们可以把该网址放在 start_urls 里,并在parse函数中解析页面,获取电影信息。同时在函数中构造下一页的url,并将其送到爬虫引擎的调度器中继续处理。 4. 爬取电影信息 在maoyan_spider.py中,我们可以定义如下的 parse 函数: import scrapy from maoyan.items import MaoyanItem class MaoyanSpiderSpider(scrapy.Spider): name = 'maoyan_spider' allowed_domains = ['maoyan.com'] start_urls = ['https://maoyan.com/board/4'] def parse(self, response): movies = response.xpath('//div[@class="movie-item-info"]') for movie in movies: item = MaoyanItem() item['rank'] = movie.xpath('./div[@class="board-index"]/text()').extract_first().strip() item['title'] = movie.xpath('./div[@class="movie-item-info"]/p[@class="name"]/a/@title').extract_first().strip() item['star'] = movie.xpath('./div[@class="movie-item-info"]/p[@class="star"]/text()').extract_first().strip() item['time'] = movie.xpath('./div[@class="movie-item-info"]/p[@class="releasetime"]/text()').extract_first().strip() yield item 在parse函数中,我们使用XPath从response中解析出每个电影名称主演上映时间和排名信息,并用yield语句将这些信息传回到Scrapy引擎中。同时,我们先在items.py中定义MaoyanItem,来存储电影信息: import scrapy class MaoyanItem(scrapy.Item): # 定义需要储存哪些电影信息 rank = scrapy.Field() title = scrapy.Field() star = scrapy.Field() time = scrapy.Field() 5. 翻页抓取 在parse函数中,我们需要再构建下一页的url,并将其传回到Scrapy引擎: def parse(self, response): movies = response.xpath('//div[@class="movie-item-info"]') for movie in movies: ... # 将下一页url交给引擎调度器 next_url = "https://maoyan.com/board/4?offset={0}".format(self.offset) if self.offset < 90: self.offset = self.offset + 10 yield scrapy.Request(next_url, callback=self.parse) 需要注意的是,这里的offset需要在MaoyanSpiderSpider类中进行初始化: def __init__(self): self.offset = 10 super(MaoyanSpiderSpider, self).__init__() 这样,Scrapy就会利用我们编写的parse函数,将top100电影的排名、名称导演等信息全部抓取下来并存储在items中,最后我们可以使用pipelines.py将这些信息存储在数据库、文件中或者输出打印。 ### 回答3: Scrapy是一个用于爬取网站数据的Python框架。它可以大大简化网站爬取过程,让我们更高效、更方便地获取需要的数据。在这个教程中,我们将使用Scrapy框架来爬取猫眼电影top100的数据。 Step1 创建Scrapy项目 首先,我们需要在命令行中创建一个新的Scrapy项目。打开命令行工具,输入以下命令(请确保已安装好Scrapy): scrapy startproject movie_top100 这将在当前目录中创建一个名为“movie_top100”的Scrapy项目文件夹。 Step2 创建Spider 在Scrapy项目中,爬虫是用来定义请求和如何处理爬取数据的。因此,我们需要创建一个新的爬虫代码文件。 在movie_top100项目文件夹下,打开命令行工具,输入以下命令($) scrapy genspider spider_name maoyan.com 这里的spider_name是我们新的爬虫命名,maoyan.com是我们要爬取数据的网站域名,这个命令会在我们的项目下创建一个名为 spider_name.py的文件。 Step3 编写Spider代码 在创建了spider_name.py文件后,我们可以开始编写我们的爬虫代码了。我们需要定义猫眼电影top100的URL链接,然后发送一个HTTP请求,通过解析返回的HTML页面来进行数据的提取和存储。 首先,在spider_name.py中我们需要导入必要的库: import scrapy from scrapy import Selector from movie_top100.items import MovieTop100Item scrapyScrapy框架的核心库,用于发送和处理HTTP请求、解析HTML网页等。 Selector是Scrapy框架内置的选择器库,用于选择和提取HTML页面中的元素。 MovieTop100Item是我们自己定义的数据结构类,用于存储爬取到的数据。 定义调度请求: 我们需要在我们定义的spider_name.py中定义请求链接。 class MaoyanSpider(scrapy.Spider): name = 'maoyan' allowed_domains = ['maoyan.com'] start_urls = ['https://maoyan.com/top/100'] 这里的name是我们定义爬虫的名字,allowed_domains是我们要爬取网站的域名,start_urls是我们要爬取的URL链接,我们通过分析猫眼电影top100列表发现数据在'https://maoyan.com/top/100'链接中,然同过这个链接我们将发送一个GET请求并返回一个HTML页面。接下来我们需要在该页面中寻找一些我们想要爬取的数据。 定义数据解析: 我们需要解析HTML页面提取我们需要的数据我们首先需要根据HTML页面中的规律(XPath表达式)选取我们想要的数据。我们可以使用Selector库完美的完成这些任务。 我们需要在spider_name.py中添加一个parse()函数,代码如下: class MaoyanSpider(scrapy.Spider): name = 'maoyan' allowed_domains = ['maoyan.com'] start_urls = ['https://maoyan.com/top/100'] def parse(self, response): movies = Selector(response=response).xpath('//div[@class="movie-item-info"]') 通过使用XPath表达式’//div[@class="movie-item-info"]’,我们将提取出top100列表中所有电影的基本信息。我们得到的是一个列表类型的数据,需要循环遍历并单独进行提取。 for movie in movies: item = MovieTop100Item() MovieTop100Item就是我们之前定义好的数据存储结构。 item['name'] = movie.xpath('div[@class="movie-item-title"]/a/text()').extract_first() item['star'] = movie.xpath('div[@class="movie-item-hover"]/div[@class="movie-hover-info"]/div[1]/span[2]/text()').extract_first() item['time'] = movie.xpath('div[@class="movie-item-hover"]/div[@class="movie-hover-info"]/div[3]/text()').extract_first().strip() yield item 通过上述代码我们提取了每个电影名称,明星和上映时间。最后使用yield item将数据存储结构类的对象item返回给 Scrapy 框架。最终的Spider代码为: import scrapy from scrapy import Selector from movie_top100.items import MovieTop100Item class MaoyanSpider(scrapy.Spider): name = 'maoyan' allowed_domains = ['maoyan.com'] start_urls = ['https://maoyan.com/top/100'] def parse(self, response): movies = Selector(response=response).xpath('//div[@class="movie-item-info"]') for movie in movies: item = MovieTop100Item() item['name'] = movie.xpath('div[@class="movie-item-title"]/a/text()').extract_first() item['star'] = movie.xpath('div[@class="movie-item-hover"]/div[@class="movie-hover-info"]/div[1]/span[2]/text()').extract_first() item['time'] = movie.xpath('div[@class="movie-item-hover"]/div[@class="movie-hover-info"]/div[3]/text()').extract_first().strip() yield item Step4 运行爬虫 代码完成后我们在命令行中运行我们的爬虫scrapy crawl maoyan 我们将看到Scrapy框架开始爬取数据,并将数据存储到我们之前定义好的movie_top100/items.py的MovieTop100数据存储结构中。 Step5 数据文件存储 当Scrapy框架完成了数据爬取,我们将得到的数据存入文件中。我们需要再在pipeline.py中编写代码,将数据存储到目标文件中。 如下所示: class MovieTop100Pipeline(object): def __init__(self): self.file = open('maoyan_movie_top100.txt', 'w', encoding='utf-8') def process_item(self, item, spider): line = item['name'] + '\t' + item['star'] + '\t' + item['time'] + '\n' self.file.write(line) return item def close_spider(self, spider): self.file.close() 当我们完成了数据管道的编写后,将它加入到我们的movie_top100/settings.py文件中: ITEM_PIPELINES = { 'movie_top100.pipelines.MovieTop100Pipeline': 300, } 这里的“300”表示处理顺序,数字越小的管道将先经过处理。 运行我们的爬虫命令: scrapy crawl maoyan 当你运行完成后,会在movie_top100文件夹下生成一个 maoyan_movie_top100.txt文件。我们尝试打开和查看, 就可以看到我们编写的爬虫成功地抓取猫眼电影top100并且将这些数据成功的存储到了txt文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值