随便选择一个网站使用Scrapy框架进行爬取数据,并对爬取的数据进行简单的数据分析
时间: 2024-06-08 18:06:05 浏览: 119
我选择了豆瓣电影网站(https://movie.douban.com/)进行爬取,并对爬取的电影数据进行简单的数据分析。
首先,我们需要安装 Scrapy 框架。在命令行中输入以下命令:
```
pip install scrapy
```
安装完成后,我们就可以开始编写爬虫了。
1. 创建 Scrapy 项目
在命令行中输入以下命令:
```
scrapy startproject douban_movie
```
这样就会在当前目录下创建一个名为 douban_movie 的 Scrapy 项目。
2. 定义 Item
在 Scrapy 中,Item 是我们要爬取的数据结构。在 douban_movie 目录下创建名为 items.py 的文件,并定义 MovieItem 类,如下所示:
```python
import scrapy
class MovieItem(scrapy.Item):
title = scrapy.Field() # 电影名称
score = scrapy.Field() # 电影评分
director = scrapy.Field() # 导演
actors = scrapy.Field() # 演员
year = scrapy.Field() # 上映年份
country = scrapy.Field() # 制片国家/地区
```
3. 编写 Spider
在 Scrapy 中,Spider 是用来定义如何爬取某个网站的。在 douban_movie 目录下创建名为 movie_spider.py 的文件,并编写 MovieSpider 类,如下所示:
```python
import scrapy
from douban_movie.items import MovieItem
class MovieSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
movie_list = response.xpath('//ol[@class="grid_view"]/li')
for movie in movie_list:
item = MovieItem()
item['title'] = movie.xpath('.//span[@class="title"]/text()').extract_first()
item['score'] = movie.xpath('.//span[@class="rating_num"]/text()').extract_first()
item['director'] = movie.xpath('.//div[@class="bd"]/p/text()[1]').\
extract_first().replace('\n', '').split(' ')[1]
item['actors'] = movie.xpath('.//div[@class="bd"]/p/text()[1]').\
extract_first().replace('\n', '').split(' ')[5].replace('...', '')
item['year'] = movie.xpath('.//div[@class="bd"]/p/text()[2]').\
extract_first().replace('\n', '').split('/')[0].strip()
item['country'] = movie.xpath('.//div[@class="bd"]/p/text()[2]').\
extract_first().replace('\n', '').split('/')[1].strip()
yield item
next_page = response.xpath('//span[@class="next"]/a/@href')
if next_page:
url = response.urljoin(next_page.extract_first())
yield scrapy.Request(url, callback=self.parse)
```
在 MovieSpider 中,我们首先定义了爬虫的名称、允许爬取的域名和起始 URL。在 parse 方法中,我们使用 XPath 选择器获取电影列表中的每一部电影,并从中提取出电影名称、评分、导演、演员、上映年份和制片国家/地区等信息,最后将这些信息存入 MovieItem 中,并通过 yield 返回。
在最后,我们还使用 XPath 选择器获取下一页的 URL,并通过 scrapy.Request 发出请求,继续爬取下一页的数据。
4. 运行爬虫
在命令行中进入 douban_movie 目录,输入以下命令即可运行爬虫:
```
scrapy crawl movie -o movie.csv
```
这样就会将爬取到的电影数据保存为名为 movie.csv 的 CSV 文件。
5. 数据分析
我们使用 Pandas 进行数据分析。在 Python 中输入以下代码:
```python
import pandas as pd
df = pd.read_csv('movie.csv')
print('电影数量:', len(df))
print('平均评分:', df['score'].mean())
print('导演数量:', len(df['director'].unique()))
print('演员数量:', len(df['actors'].unique()))
print('年份数量:', len(df['year'].unique()))
print('国家/地区数量:', len(df['country'].unique()))
```
这样就可以统计出爬取到的电影数量、平均评分、导演数量、演员数量、年份数量和国家/地区数量等信息。
完整代码如下:
阅读全文