python爬虫数据可视化详细教程
时间: 2023-09-26 13:07:21 浏览: 101
Python 爬虫可以帮助我们获取互联网上的数据,而数据可视化则可以将这些数据以更加直观、易于理解的方式呈现出来。下面是一个简单的 Python 爬虫数据可视化的教程:
1. 爬取数据
首先,我们需要使用 Python 爬虫获取数据。这里我们以爬取豆瓣电影 Top 250 为例。具体代码如下:
```python
import requests
from bs4 import BeautifulSoup
url = 'https://movie.douban.com/top250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
movies = []
for item in soup.select('.item'):
movie = {
'title': item.select('.title')[0].get_text(),
'rating': item.select('.rating_num')[0].get_text(),
'director': item.select('.bd p')[0].get_text().split('\n')[1].strip(),
'actors': item.select('.bd p')[0].get_text().split('\n')[2].strip(),
'year': item.select('.bd p')[1].get_text().split('\n')[1].strip()
}
movies.append(movie)
```
以上代码使用 requests 库发送 HTTP 请求,使用 Beautiful Soup 库解析 HTML,然后提取出电影的标题、评分、导演、演员和年份等信息,存储在一个列表中。
2. 数据清洗
获取的数据中可能存在一些不规则的字符或者缺失值,需要进行数据清洗。这里我们使用 pandas 库进行数据清洗和处理。具体代码如下:
```python
import pandas as pd
df = pd.DataFrame(movies)
df['rating'] = df['rating'].astype(float)
df['year'] = df['year'].apply(lambda x: x[1:-1])
print(df.head())
```
以上代码将列表转换为 DataFrame 格式,将评分列转换为浮点型,将年份列的首尾括号去掉。
3. 数据可视化
最后,我们使用 matplotlib 库进行数据可视化。这里我们以绘制电影评分分布图为例。具体代码如下:
```python
import matplotlib.pyplot as plt
plt.hist(df['rating'], bins=10, color='steelblue', edgecolor='k')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.title('Movie Rating Distribution')
plt.show()
```
以上代码使用 hist() 方法绘制直方图,设置横轴和纵轴标签以及标题,最后使用 show() 方法显示图形。
完整代码如下:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
url = 'https://movie.douban.com/top250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
movies = []
for item in soup.select('.item'):
movie = {
'title': item.select('.title')[0].get_text(),
'rating': item.select('.rating_num')[0].get_text(),
'director': item.select('.bd p')[0].get_text().split('\n')[1].strip(),
'actors': item.select('.bd p')[0].get_text().split('\n')[2].strip(),
'year': item.select('.bd p')[1].get_text().split('\n')[1].strip()
}
movies.append(movie)
df = pd.DataFrame(movies)
df['rating'] = df['rating'].astype(float)
df['year'] = df['year'].apply(lambda x: x[1:-1])
plt.hist(df['rating'], bins=10, color='steelblue', edgecolor='k')
plt.xlabel('Rating')
plt.ylabel('Count')
plt.title('Movie Rating Distribution')
plt.show()
```
运行以上代码,即可得到电影评分分布直方图。
阅读全文