使用Scrapy爬取豆瓣电影Top250
Scrapy是一个用Python编写的强大的网络抓取框架,可以简化数据爬取过程中的许多复杂任务。本文将介绍如何使用Scrapy爬取豆瓣电影Top250,并提供一个简单的例子。
首先,我们需要在本地安装Scrapy。可以通过pip命令来安装Scrapy:
pip install scrapy
安装完成后,我们就可以开始编写我们的豆瓣电影Top250爬虫了。
新建一个名为douban_spider的Scrapy项目。在命令行中,使用以下命令:
scrapy startproject douban_spider
这将在当前目录下创建一个名为douban_spider的文件夹,并生成相关的项目文件。
进入douban_spider文件夹,创建一个名为douban_movie的爬虫。在命令行中,使用以下命令:
cd douban_spider scrapy genspider douban_movie movie.douban.com
这将在spiders文件夹下创建一个名为douban_movie.py的爬虫文件,并生成相关的代码。
打开douban_movie.py文件,删除其中的注释内容,并修改代码:
import scrapy
from scrapy.selector import Selector
from douban_spider.items import DoubanMovieItem
class DoubanMovieSpider(scrapy.Spider):
name = 'douban_movie'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
movies = Selector(response).xpath('//div[@class="info"]')
for movie in movies:
item = DoubanMovieItem()
item['title'] = movie.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract_first()
item['score'] = movie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first()
item['quote'] = movie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract_first()
yield item
在这段代码中,我们首先导入了需要的库和类。然后定义了一个名为DoubanMovieSpider的类,继承自scrapy.Spider。
在类中,我们定义了爬虫的名称(name)和允许爬取的域名(allowed_domains)。然后,我们指定了起始URL(start_urls)。
接下来,我们定义了一个名为parse的回调函数,用于处理收到的响应。在这个函数中,我们使用XPath来提取所需的数据,并创建一个DoubanMovieItem对象来保存数据。
最后,我们使用yield关键字返回item,以便Scrapy可以将其传给下一个阶段进行处理。
现在,我们需要定义一个DoubanMovieItem类,用于保存爬取结果。在items.py文件中,添加以下代码:
import scrapy
class DoubanMovieItem(scrapy.Item):
title = scrapy.Field()
score = scrapy.Field()
quote = scrapy.Field()
在这个类中,我们使用了Scrapy提供的Field类定义了三个属性:title、score和quote。这些属性将用于保存我们爬取到的数据。
最后,我们需要设置一些Scrapy的配置项。在settings.py文件中,添加以下代码:
BOT_NAME = 'douban_spider' SPIDER_MODULES = ['douban_spider.spiders'] NEWSPIDER_MODULE = 'douban_spider.spiders' ROBOTSTXT_OBEY = True
以上就是一个简单的使用Scrapy爬取豆瓣电影Top250的例子。要执行爬虫,可以在命令行中使用以下命令:
scrapy crawl douban_movie
执行完成后,爬取的结果将保存到控制台中。如果要将结果保存到文件中,可以执行以下命令:
scrapy crawl douban_movie -o movies.csv
这将把结果保存到名为movies.csv的文件中。
希望这个例子对你理解如何使用Scrapy爬取豆瓣电影Top250有所帮助!如有任何疑问,欢迎提问。
