Python使用scrapy爬取豆瓣TOP250详情页并导出json文件
时间: 2025-04-02 07:14:32 浏览: 41
### 使用 Scrapy 抓取豆瓣 TOP250 电影详情页数据并导出为 JSON 文件
#### 创建 Scrapy 工程
通过命令行创建一个新的 Scrapy 项目,命名为 `douban_movie`。此操作会生成项目的目录结构以及必要的配置文件。
```bash
scrapy startproject douban_movie
```
这一步完成后,会在当前路径下生成一个名为 `douban_movie` 的文件夹,其中包含了多个子文件和目录[^1]。
#### 定义 Item 对象
编辑 `items.py` 文件,定义需要抓取的数据字段。以下是示例代码:
```python
import scrapy
class DoubanMovieItem(scrapy.Item):
ranking = scrapy.Field() # 排名
name = scrapy.Field() # 名称
introduction = scrapy.Field() # 简介
star = scrapy.Field() # 星级评分
evaluate = scrapy.Field() # 评价人数
description = scrapy.Field() # 描述信息
```
这些字段对应于豆瓣 TOP250 页面中的具体信息项。
#### 编写 Spider 脚本
在 `spiders/` 目录下创建新的爬虫脚本,例如 `douban_spider.py`。以下是一个完整的实现例子:
```python
import scrapy
from ..items import DoubanMovieItem
class DoubanSpider(scrapy.Spider):
name = 'douban_spider'
allowed_domains = ['movie.douban.com']
start_urls = [
f'https://movie.douban.com/top250?start={page * 25}&filter=' for page in range(10)
]
def parse(self, response):
movie_items = response.css('div.item')
for item in movie_items:
detail_url = item.css('a::attr(href)').get()
yield scrapy.Request(url=detail_url, callback=self.parse_detail)
def parse_detail(self, response):
movie_item = DoubanMovieItem()
movie_item['ranking'] = response.xpath('//span[@class="top250-no"]/text()').re(r'#(\d+)')[0]
movie_item['name'] = response.css('h1 span[property="v:itemreviewed"]::text').get()
movie_item['introduction'] = response.css('div.indent span::text').get().strip()
movie_item['star'] = response.css('strong.rating_num::text').get()
movie_item['evaluate'] = response.css('a.rating_people span::text').get()
movie_item['description'] = ''.join(response.css('#link-report span.all.hidden::text,#link-report span.pl::text').extract()).strip()
yield movie_item
```
上述代码实现了两个解析函数:`parse()` 和 `parse_detail()`。前者负责从列表页面跳转到每部电影的详情页;后者则提取具体的电影信息。
#### 配置 Pipeline 输出
修改 `pipelines.py` 文件以支持将数据保存为 JSON 格式的功能。默认情况下,Scrapy 提供了一个内置方法可以直接完成这一需求。因此无需额外定制 pipeline 功能即可满足基本要求[^3]。
运行如下命令启动爬虫并将结果保存至本地 JSON 文件中:
```bash
scrapy crawl douban_spider -o movies.json
```
该指令表示执行名为 `douban_spider` 的爬虫程序,并将其输出重定向到名为 `movies.json` 的文件里。
---
### 注意事项
- **反爬机制处理**:由于豆瓣网站可能存在一定的防爬措施(如 IP 封禁),建议适当降低请求频率或者启用代理池服务。
- **合法性声明**:确保遵守目标网站的服务条款与法律法规,在合理范围内开展数据采集活动。
---
阅读全文
相关推荐


















