python爬取京东商品评论_Python爬取京东商品评论+制作关键字云+情感分析图

首先我们要了解一下,我们用requests包爬取的都只是写在HTML页面上的数据,但是呢,现在很多网站的数据都是通过js代码生成的,除非你找到它,不然是爬取不到的。

首先我随意打开一个京东的商品的详情页面:

然后打开谷歌的调试工具,点开network,京东的商品评论信息是存放json包中的,我们点击JS:

我们发现了productPageComment…,这也太像了吧,点开:

找到他的Request URL,复制下来,打开这个链接:

的确是我们想要的评论信息,下面我们来爬去它,爬去之前,我们要注意,这只是一页信息,那其他页呢,仔细看:

中间有一个page=0,这就是第一页的标志,那page=1就是第二页,page=2就是第三页了吧?试验一下:

打开看,果然是这样。那我们就可以来爬取了!

这里用到三个工具包:requests、json、pandas

可以通过 pip install -U指令来安装,不过国内某些站点的下载速度被限制了,大家可以通过使用镜像站点来下载,比如:

这是清华大学的站点,本人试过了,贼快,突突的。

爬取开始

首先导入需要的包:

第一步,创建一个方法获取网页信息:

第二步:创建一个方法将评论信息添加到列表中:

最后,设置爬取页数,对前两个方法的参数进行传值,

并建一个循环对页数进行遍历:

完整爬取代码:

importrequests

importjson

importpandas aspd

# 获取网页信息defgetHTMLText(url):

try:

# 设置请求头

headers ={'user-agent':'Mozilla/5.0'}

r =requests.get(url, headers=headers, timeout=30)

r.raise_for_status()

r.encoding=r.apparent_encoding

returnr.text  # 返回到json数据页面

except:

print("发生异常,获取页面失败")

print(r.status_code)# 查看访问状态

# 将HTML信息放到列表中deffillComList(cList, cJson):

try:

#

去掉多余字符

start_Loc =cJson.find('{')

cJson =cJson[start_Loc:-2]

cJson =json.loads(cJson)# 字典数据

pagelen =len(cJson['comments'])

forj inrange(pagelen):

cList.append(cJson['comments'][j]['content'])

# data = {'评论内容': cList}  #用字典封装数据

# print(data)

# print(cList)

except:

print("数据封装异常")

returncList

if__name__ =='__main__':

pages =10

# 声明一个列表,存储评论信息

comList = []

# 爬取页数

fori inrange(pages):

try:

url ="https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=6708133&score=0&sortType=5&page="+str(i)+"&pageSize=10&isShadowSku=0&fold=1"

comjson =getHTMLText(url)

print("正在爬取第"+str(i+1)+"页")

fillComList(comList, comjson)

except:

print("发生异常1")

continue

data ={'评论内容':comList}# 用字典封装数据

df =pd.DataFrame(data)# 将二维表结构的数据

#

将数据封装在txt文件中

df["评论内容"].to_csv(r'你的保存路径\content.txt', sep='\t', index=False)

爬取成功:

对数据进行加工处理,生成关键字云:

首先导入的需要的包:

创建一个方法生成关键字云:

在main方法中对参数传值:

结果:

关键字云完整代码:

importmatplotlib.pyplot asplt

fromwordcloud importWordCloud

importjieba

defcreateWordcloud(path):

# 打开content.txt文件,并将编码设为utf-8

f =open(path, 'r', encoding='utf-8').read()

# jieba分词

cut_text =''.join(jieba.cut(f))

wc=WordCloud(

# 设置字体

font_path='C://Windows//Fonts//msyh.ttc',

# 设置背景

background_color="white", width=3000, height=2500).generate(cut_text)

plt.imshow(wc, interpolation='bilinear')

plt.axis("off")

plt.show()

wc.to_file('你的保存路径//1.jpg')

if__name__ =='__main__':

# 要读取的文件

path_txt ='你的文件路径//content.txt'

createWordcloud(path_txt)

生成情感分析:

首先导入需要的包:

创建一个方法生成情感分析图,并在main方法中对参数传值:

结果:

情感分析完整代码:

importmatplotlib.pyplot asplt

fromsnownlp importSnowNLP

importpandas aspd

defcreateSnowNLO(path):

txt =open(path, 'r', encoding='UTF-8')

text =txt.readlines()

txt.close()

print('读入成功')

sentences = []

senti_score = []

fori intext:

a1 =SnowNLP(i)

a2=a1.sentiments

sentences.append(i)

# 语序...

senti_score.append(a2)

table =pd.DataFrame(sentences, senti_score)

plt.plot(senti_score, linestyle='-')

plt.show()

if__name__ =='__main__':

path_txt =r'你的文件路径\content.txt'

createSnowNLO(path_txt)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值