使用scrapy框架爬取https://movie.douban.com/cinema/later/zhangzhou/中的即将上映的电影信息。 字段包括:电影名称、上映日期、类型、国家 并输出为json格式的文件。 提交截图、json文件、代码文件
时间: 2024-12-23 08:26:32 浏览: 43
Scrapy是一个强大的Python网络爬虫框架,用于高效地抓取网页数据。首先,你需要安装Scrapy库,然后创建一个新的Scrapy项目。这里我会给出一个简单的步骤说明如何使用Scrapy爬取指定网站的数据,并将结果保存为JSON文件:
1. **安装Scrapy** (如果尚未安装):
```
pip install scrapy
```
2. **创建新项目**:
```
scrapy startproject douban_movies
cd douban_movies
```
3. **生成新的爬虫**:
```python
scrapy genspider zhangzhou cinema doubtnet -o movies.json
```
这会创建一个名为`cinema`的新爬虫,目标URL为`https://movie.douban.com/cinema/later/zhangzhou/`,并将结果保存到`movies.json`文件。
4. **编辑爬虫`spiders/cinema.py`**:
```python
import scrapy
from douban_movies.items import CinemaItem
class CinemaSpider(scrapy.Spider):
name = 'zhangzhou'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/cinema/later/zhangzhou/']
def parse(self, response):
item = CinemaItem()
movie_data = response.css('div.movie-item')
for data in movie_data:
title = data.css('.title a::text').get() # 电影名称
release_date = data.css('.date span::text').get() # 上映日期
type_and_country = data.css('.bd-info strong::text')[0::2] # 类型+国家
types = [t.strip() for t in type_and_country if t.strip()] # 避免空值
country = type_and_country[-1].strip() if len(type_and_country) > 1 else None # 国家
item['title'] = title
item['release_date'] = release_date
item['types'] = types
item['country'] = country
yield item
def closed(self, reason):
with open('movies.json', 'w', encoding='utf-8') as f:
self.logger.info("Saving data to movies.json")
json.dump(self.crawled_items, f, ensure_ascii=False, indent=2)
```
这里假设`douban_movies/items.py`已包含`CinemaItem`类,如果没有,可以创建一个类似这样的:
```python
import scrapy
class CinemaItem(scrapy.Item):
title = scrapy.Field()
release_date = scrapy.Field()
types = scrapy.Field(list)
country = scrapy.Field()
```
5. **运行爬虫**:
```
scrapy crawl zhangzhou
```
6. **检查结果**:
爬虫完成后,你会看到`movies.json`文件,打开它查看抓取的电影信息。请注意,由于网站结构可能会变化,这个脚本可能需要根据实际情况调整CSS选择器。
**注意**:实际操作时请遵守网站的Robots协议,并尊重版权。在生产环境中,可能需要处理反爬虫策略,如验证码等。
阅读全文