https://movie.douban.com/top250?start=0&filter=帮我爬取这个网站数据,并做好可视化界面
时间: 2024-01-11 13:05:18 浏览: 124
基于Python的豆瓣top250电影爬虫与数据可视化分析设计源码
5星 · 资源好评率100%
好的,我可以使用Python的爬虫框架Scrapy来爬取豆瓣电影Top250的数据,并使用数据可视化工具matplotlib或者seaborn来进行数据可视化。以下是代码示例:
首先,安装Scrapy和matplotlib/seaborn:
```
pip install scrapy
pip install matplotlib
pip install seaborn
```
然后,创建一个新的Scrapy项目:
```
scrapy startproject douban_movie
```
接着,在douban_movie/spiders目录下创建一个名为douban_spider.py的爬虫文件,用于定义爬虫规则:
```python
import scrapy
class DoubanSpider(scrapy.Spider):
name = "douban"
allowed_domains = ["movie.douban.com"]
start_urls = ["https://movie.douban.com/top250?start=0&filter="]
def parse(self, response):
for movie in response.xpath('//div[@class="info"]'):
yield {
'title': movie.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract_first(),
'rating': movie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first(),
'director': movie.xpath('div[@class="bd"]/p[@class=""]/text()').extract()[0].strip().split(':')[1],
'year': movie.xpath('div[@class="bd"]/p[@class=""]/text()').extract()[1].strip().split('/')[0],
'country': movie.xpath('div[@class="bd"]/p[@class=""]/text()').extract()[1].strip().split('/')[1],
'category': movie.xpath('div[@class="bd"]/p[@class=""]/text()').extract()[1].strip().split('/')[2],
'url': movie.xpath('div[@class="hd"]/a/@href').extract_first()
}
next_page = response.xpath('//span[@class="next"]/a/@href')
if next_page:
yield response.follow(next_page[0], self.parse)
```
解释一下以上代码:
- `name`:爬虫名称,用于运行爬虫时指定。
- `allowed_domains`:可爬取的域名。
- `start_urls`:起始URL。
- `parse`:解析响应的方法。使用XPath来提取数据,并使用yield语句返回一个字典,包含电影的标题、评分、导演、年份、国家、类型和链接。同时,如果有下一页,继续解析下一页的数据。
接下来,在settings.py中开启ITEM_PIPELINES和FEED_FORMAT,以及设置FEED_URI:
```python
ITEM_PIPELINES = {'douban_movie.pipelines.DoubanMoviePipeline': 300}
FEED_FORMAT = 'csv'
FEED_URI = 'douban_movie.csv'
```
然后,创建一个名为DoubanMoviePipeline的管道类,在process_item方法中将数据写入CSV文件中:
```python
import csv
class DoubanMoviePipeline(object):
def __init__(self):
self.file = open('douban_movie.csv', 'w', encoding='utf-8', newline='')
self.writer = csv.writer(self.file)
self.writer.writerow(['title', 'rating', 'director', 'year', 'country', 'category', 'url'])
def process_item(self, item, spider):
self.writer.writerow([item['title'], item['rating'], item['director'], item['year'], item['country'], item['category'], item['url']])
return item
def close_spider(self, spider):
self.file.close()
```
最后,在命令行中运行爬虫:
```
scrapy crawl douban
```
等待爬虫运行完成后,会在当前目录下生成名为douban_movie.csv的CSV文件,包含了豆瓣电影Top250的数据。可以使用matplotlib或者seaborn来进行数据可视化,例如:
```python
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('douban_movie.csv')
plt.hist(df['rating'], bins=10)
plt.title('Distribution of Movie Ratings')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.show()
```
以上代码会画出一个电影评分的直方图。
阅读全文