爬虫爬取豆瓣电影评论和评分
时间: 2025-05-09 22:03:27 浏览: 75
### 使用 Scrapy 抓取豆瓣电影的用户评论和评分
要实现抓取豆瓣电影的用户评论和评分,可以按照以下方法完成:
#### 1. 创建 Scrapy 项目
首先需要创建一个新的 Scrapy 项目。打开终端并运行以下命令:
```bash
scrapy startproject douban_movie
```
这将在当前目录下生成一个名为 `douban_movie` 的项目文件夹。
#### 2. 制作爬虫文件
进入项目的 `spiders` 文件夹,并生成一个用于爬取豆瓣 Top 250 页面的爬虫文件:
```bash
cd douban_movie/spiders/
scrapy genspider douban_spider https://movie.douban.com/top250
```
此操作会自动生成一个名为 `douban_spider.py` 的爬虫文件[^4]。
#### 3. 明确目标数据结构 (Items)
在 Scrapy 中,可以通过定义 Items 来指定需要提取的数据字段。编辑 `items.py` 文件,添加如下内容以保存电影名称、评分和评论信息:
```python
import scrapy
class DoubanMovieItem(scrapy.Item):
movie_name = scrapy.Field() # 电影名称
rating = scrapy.Field() # 用户评分
comment = scrapy.Field() # 用户评论
```
#### 4. 编写爬虫逻辑
修改 `douban_spider.py` 文件中的爬虫类,使其能够解析页面并提取所需的信息。以下是完整的爬虫代码示例:
```python
import scrapy
from ..items import DoubanMovieItem
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
items = []
movies = response.css('div.item') # 提取每部电影的相关信息
for movie in movies:
item = DoubanMovieItem()
title = movie.css('.title::text').get().strip() # 获取电影名
rating = movie.css('.rating_num::text').get().strip() # 获取评分
comments_url = movie.css('a::attr(href)').get() # 进入详情页获取更多评论
yield scrapy.Request(comments_url, callback=self.parse_comments, meta={'item': item})
next_page = response.css('span.next a::attr(href)').get() # 处理分页
if next_page is not None:
yield response.follow(next_page, self.parse)
def parse_comments(self, response):
item = response.meta['item'] # 继续填充 Item 数据
comments = response.css('#hot-comments span.short::text').extract()[:5] # 只提取前五条评论
item['comment'] = comments # 将评论存入 Item
yield item # 返回最终结果
```
上述代码实现了两个主要功能:一是从首页提取电影基本信息;二是跳转至具体电影页面抓取热门评论[^2]。
#### 5. 存储抓取的内容 (Pipeline)
为了将抓取到的数据持久化存储,在 `pipelines.py` 文件中编写管道逻辑。例如将其保存为 JSON 文件:
```python
import json
class JsonWriterPipeline(object):
def open_spider(self, spider):
self.file = open('movies.json', 'w')
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
```
最后记得激活该 Pipeline,在 `settings.py` 文件中找到 `ITEM_PIPELINES` 并配置:
```python
ITEM_PIPELINES = {'douban_movie.pipelines.JsonWriterPipeline': 300}
```
#### 6. 执行爬虫
返回根目录执行以下命令启动爬虫:
```bash
scrapy crawl douban -o output.csv
```
以上流程涵盖了从初始化项目到实际部署整个过程[^3]。
---
阅读全文
相关推荐
















