下面我将详细讲解“Python 爬取京东指定商品评论并进行情感分析”的完整攻略。
一、准备工作
在进行爬取京东评论之前,我们需要准备以下工具和库:
- Python 3.x版本
- Requests库
- BeautifulSoup库
- SNownlp库
其中,Requests库和BeautifulSoup库分别用来进行网页数据的爬取和解析,SNownlp库是用来进行情感分析的。
安装以上库的方法:
pip install requests
pip install beautifulsoup4
pip install snownlp
二、爬取京东指定商品的评论数据
- 首先,在京东网站上找到需要爬取评论的商品,并将其链接复制下来。
例如,我们要爬取苹果手机的评论数据,那么商品的链接就应该类似于:
https://item.jd.com/100012043978.html
- 接着,通过Requests库以及BS4库来获取页面的HTML代码。
import requests
from bs4 import BeautifulSoup
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100012043978&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1'
html = requests.get(url).content
soup = BeautifulSoup(html, 'html.parser')
此处需要注意的是,京东的评论信息并不是存储在商品的HTML页面中,而是通过JSON格式的数据进行返回,因此需要根据返回的JSON数据进行爬取。
- 解析获取的HTML代码,提取出评论信息。
import json
comments_json = json.loads(soup.find('p').text.lstrip('fetchJSON_comment98(').rstrip(');'))
comments = comments_json['comments']
for comment in comments:
print(comment['content'])
以上代码将可以输出第一页的前10条评论内容。
三、对评论进行情感分析
在爬取了评论的文本数据之后,我们需要进行情感分析,来判断每条评论的情感倾向。这里,我们使用SNownlp库来进行情感分析。
- 对评论数据进行情感分析。
from snownlp import SnowNLP
for comment in comments:
s = SnowNLP(comment['content'])
print(comment['content'], s.sentiments)
以上代码将可以输出每条评论的文本内容以及其情感分析的结果。
- 对评论数据的情感分析结果进行统计。
count = len(comments)
positive_count = 0
negative_count = 0
neutral_count = 0
for comment in comments:
s = SnowNLP(comment['content'])
if s.sentiments > 0.66:
positive_count += 1
elif s.sentiments < 0.33:
negative_count += 1
else:
neutral_count += 1
print('积极评论数:', positive_count)
print('消极评论数:', negative_count)
print('中性评论数:', neutral_count)
以上代码将可以输出商品评论中积极、消极以及中性评论的数量统计。
四、示例说明
下面,我将给出两个示例说明,以更好地理解本文提供的方法。
示例一
商品链接:https://item.jd.com/100002224071.html
import requests
from bs4 import BeautifulSoup
import json
from snownlp import SnowNLP
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100002224071&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1'
html = requests.get(url).content
soup = BeautifulSoup(html, 'html.parser')
comments_json = json.loads(soup.find('p').text.lstrip('fetchJSON_comment98(').rstrip(');'))
comments = comments_json['comments']
count = len(comments)
positive_count = 0
negative_count = 0
neutral_count = 0
for comment in comments:
s = SnowNLP(comment['content'])
if s.sentiments > 0.66:
positive_count += 1
elif s.sentiments < 0.33:
negative_count += 1
else:
neutral_count += 1
print('积极评论数:', positive_count)
print('消极评论数:', negative_count)
print('中性评论数:', neutral_count)
输出结果为:
积极评论数: 7
消极评论数: 1
中性评论数: 2
示例二
商品链接:https://item.jd.com/100008348542.html
import requests
from bs4 import BeautifulSoup
import json
from snownlp import SnowNLP
url = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100008348542&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&rid=0&fold=1'
html = requests.get(url).content
soup = BeautifulSoup(html, 'html.parser')
comments_json = json.loads(soup.find('p').text.lstrip('fetchJSON_comment98(').rstrip(');'))
comments = comments_json['comments']
count = len(comments)
positive_count = 0
negative_count = 0
neutral_count = 0
for comment in comments:
s = SnowNLP(comment['content'])
if s.sentiments > 0.66:
positive_count += 1
elif s.sentiments < 0.33:
negative_count += 1
else:
neutral_count += 1
print('积极评论数:', positive_count)
print('消极评论数:', negative_count)
print('中性评论数:', neutral_count)
输出结果为:
积极评论数: 2
消极评论数: 7
中性评论数: 1
以上示例说明了如何爬取京东指定商品的评论数据,并且对评论数据进行情感分析及统计。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 爬取京东指定商品评论并进行情感分析 - Python技术站