用python爬取豆瓣读书网中的评论人数和评分存储到mongodb中,怎么进行数据处理
时间: 2023-12-23 12:04:59 浏览: 107
python爬取豆瓣评分
首先,你需要安装pymongo库来连接mongodb数据库。可以使用以下命令进行安装:
```
pip install pymongo
```
然后,你需要使用BeautifulSoup库解析HTML页面,获取评论人数和评分。以下是一个简单的爬取代码示例:
``` python
from bs4 import BeautifulSoup
import requests
import pymongo
# 连接MongoDB数据库
client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['douban_book']
collection = db['book_reviews']
url = 'https://book.douban.com/subject/1084336/comments/'
# 发送HTTP请求
response = requests.get(url)
# 解析HTML页面
soup = BeautifulSoup(response.text, 'html.parser')
comments = soup.find_all('span', {'class': 'comment-info'})
# 遍历评论列表并存储到MongoDB中
for comment in comments:
rating = comment.find('span', {'class': 'rating'}).attrs['title']
votes = comment.find('span', {'class': 'votes'}).text
collection.insert_one({'rating': rating, 'votes': votes})
```
这个代码会将每个评论的评分和评论人数存储到MongoDB数据库中的`book_reviews`集合中。接下来,你可以使用MongoDB的聚合操作来对数据进行处理。以下是一些常用的聚合操作:
1. 计算平均评分
``` python
result = collection.aggregate([
{'$group': {'_id': None, 'avg_rating': {'$avg': '$rating'}}}
])
for doc in result:
print('The average rating is:', doc['avg_rating'])
```
2. 计算评分的分布
``` python
result = collection.aggregate([
{'$group': {'_id': '$rating', 'count': {'$sum': 1}}},
{'$sort': {'_id': 1}}
])
for doc in result:
print(doc['_id'], doc['count'])
```
3. 统计每个评分对应的评论人数
``` python
result = collection.aggregate([
{'$group': {'_id': '$rating', 'total_votes': {'$sum': {'$toInt': '$votes'}}}},
{'$sort': {'_id': 1}}
])
for doc in result:
print(doc['_id'], doc['total_votes'])
```
这些聚合操作可以帮助你更好地理解数据,发现数据中的规律和趋势。当然,根据具体的需求,你还可以进行更多的数据处理和分析。
阅读全文