基于python的scrapy框架爬取豆瓣电影及其可视化
时间: 2023-10-01 10:11:12 浏览: 182
好的,下面是基于Python的Scrapy框架爬取豆瓣电影的步骤:
1. 创建Scrapy项目
使用以下命令在命令行中创建新的Scrapy项目:
```
scrapy startproject douban_movie
```
这将在当前目录下创建一个名为douban_movie的文件夹,其中包含了一个Scrapy项目的基本结构。
2. 定义Item
在Scrapy中,Item是一个Python类,用于存储从网页中提取出来的数据。在此例中,我们需要定义一个Item来存储每部电影的信息,包括电影名称、导演、主演、上映日期、评分等。
在douban_movie/spiders文件夹下创建一个名为items.py的文件,定义一个MovieItem类,代码如下:
```python
import scrapy
class MovieItem(scrapy.Item):
name = scrapy.Field()
director = scrapy.Field()
actors = scrapy.Field()
release_date = scrapy.Field()
rating = scrapy.Field()
```
3. 编写Spider
在Scrapy中,Spider是用于从网页中提取数据的核心组件。我们需要编写一个Spider来爬取豆瓣电影的信息。
在douban_movie/spiders文件夹下创建一个名为douban_spider.py的文件,定义一个DoubanSpider类,代码如下:
```python
import scrapy
from douban_movie.items import MovieItem
class DoubanSpider(scrapy.Spider):
name = "douban"
allowed_domains = ["movie.douban.com"]
start_urls = ["https://movie.douban.com/top250"]
def parse(self, response):
movies = response.xpath('//div[@class="hd"]')
for movie in movies:
item = MovieItem()
item['name'] = movie.xpath('.//a/span/text()').extract_first()
item['director'] = movie.xpath('.//div[@class="bd"]/p/text()[1]').\
extract_first().strip().split(":")[1]
item['actors'] = movie.xpath('.//div[@class="bd"]/p/text()[1]').\
extract_first().strip().split(":")[2]
item['release_date'] = movie.xpath('.//div[@class="bd"]/p/text()[2]').\
extract_first().strip().split("/")[0].strip()
item['rating'] = movie.xpath('.//span[@class="rating_num"]/text()').\
extract_first()
yield item
```
在上述代码中,我们首先定义了Spider的名称、域名和起始URL。然后,在parse()方法中,我们使用XPath表达式来提取每部电影的信息,并将其存储到我们之前定义的MovieItem对象中。最后,我们使用yield关键字返回每个MovieItem对象,使其能够被后续的Pipeline组件处理。
4. 编写Pipeline
在Scrapy中,Pipeline是用于对Spider提取出的数据进行处理的组件。在此例中,我们需要编写一个Pipeline来将电影信息存储到本地文件中。
在douban_movie/pipelines文件夹下创建一个名为douban_pipeline.py的文件,定义一个DoubanPipeline类,代码如下:
```python
import json
class DoubanPipeline(object):
def open_spider(self, spider):
self.file = open('douban_movie.json', 'w', encoding='utf-8')
def close_spider(self, spider):
self.file.close()
def process_item(self, item, spider):
line = json.dumps(dict(item), ensure_ascii=False) + '\n'
self.file.write(line)
return item
```
在上述代码中,我们首先在open_spider()方法中创建了一个名为douban_movie.json的文件,用于存储电影信息。然后,在close_spider()方法中关闭了该文件。最后,在process_item()方法中,我们将每个MovieItem对象转换为JSON格式,并将其写入到文件中。
5. 运行Spider
在命令行中执行以下命令,启动Spider并爬取数据:
```
scrapy crawl douban
```
Spider会自动爬取豆瓣电影Top250的页面,并将提取出来的电影信息存储到本地文件中。
至此,我们已经成功地使用Scrapy框架爬取了豆瓣电影的信息。接下来,我们可以使用Python的数据可视化工具来对这些数据进行分析和展示。
阅读全文
相关推荐


















