爬取猫眼网站并数据预处理完整代码
时间: 2024-11-14 12:14:49 浏览: 145
在Python中爬取猫眼电影网站的数据并进行预处理,通常需要以下几个步骤:
1. **安装依赖**:
首先,你需要安装一些用于网络请求、HTML解析和数据清洗的库,如`requests`, `beautifulsoup4`, 和 `pandas`。如果你还没有安装,可以使用下面的命令安装:
```shell
pip install requests beautifulsoup4 pandas
```
2. **发送GET请求**:
使用`requests.get()`函数从猫眼网站获取HTML内容:
```python
import requests
url = 'https://movie.douban.com/top250' # 示例:热门电影页面URL
response = requests.get(url)
```
3. **解析HTML**:
利用`BeautifulSoup`解析HTML内容,找到需要的数据元素,例如电影名、评分等信息:
```python
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
data_movies = soup.find_all('div', class_='hd') # 假设电影信息在名为'hd'的div标签内
```
4. **提取数据**:
对每个电影div,提取相关信息(如电影名、评分等),并将它们放入字典或列表中:
```python
movies_data = []
for movie in data_movies:
title = movie.find('span', class_='title').text # 电影名
rating = float(movie.find('span', class_='rating_num')['class'][0].split('_')[1]) # 评分
movies_data.append({'title': title, 'rating': rating})
```
5. **数据预处理**:
检查数据质量,如有缺失值、异常值,可能需要进行填充、清洗或转换。这里可以使用`pandas`库:
```python
import pandas as pd
df = pd.DataFrame(movies_data)
# 清洗数据(如有必要)
df.dropna(inplace=True) # 删除含有缺失值的行
df['rating'] = df['rating'].astype(float) # 类型转换
# 数据存储,可以选择CSV、Excel或其他数据库格式
df.to_csv('douban_movies.csv', index=False)
```
6. **异常处理**:
要考虑到网络请求可能会失败或网页结构发生变化,添加适当的错误处理和重试机制。
完整的代码示例可能看起来像这样:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
def fetch_movie_data(url):
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # 如果状态码不是200,抛出异常
return response.text
except Exception as e:
print(f"Error fetching data: {e}")
return None
def parse_html(html_content):
soup = BeautifulSoup(html_content, 'html.parser')
data_movies = soup.find_all('div', class_='hd')
movies_data = []
for movie in data_movies:
title = movie.find('span', class_='title').text
rating_str = movie.find('span', class_='rating_num')['class'][0].split('_')[1]
movies_data.append({'title': title, 'rating': float(rating_str)})
return movies_data
url = 'https://movie.douban.com/top250'
html_content = fetch_movie_data(url)
if html_content is not None:
movies_data = parse_html(html_content)
df = pd.DataFrame(movies_data)
df.dropna(inplace=True)
df.to_csv('douban_movies.csv', index=False)
阅读全文