scrapy爬取猫眼电影top100
时间: 2023-05-31 11:20:37 浏览: 345
Python爬取电影榜单Top100并保存csv文件(附源码下载)
5星 · 资源好评率100%
### 回答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
scrapy是Scrapy框架的核心库,用于发送和处理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文件中。
阅读全文