当前位置:   article > 正文

python爬虫1:天猫评论的爬取(附词云解析)_爬取评价数据:编写爬虫,评论数据,主要爬取评价评分

爬取评价数据:编写爬虫,评论数据,主要爬取评价评分

废话少说,直接上干货

选择的淘宝产品是olay官方旗舰店下的产品,

点击到评价页面之后,打开网页源代码,找到评论的链接如下所示

接下来就是爬取的过程了,找到链接:

rate.tmall.com/list_det

为了发现不同页数URL链接的区别,多选择几页

rate.tmall.com/list_det

随后你就会发现,变化的参数是currentPage,_ksTS,callback,其中主要的参数是currentPage,其他的参数只是随着时间不同在变化,没啥用

接下来就需要写代码了,完整代码如下:

  1. #导入需要的库
  2. import requests
  3. from bs4 import BeautifulSoup as bs
  4. import json
  5. import csv
  6. import re
  7. import time
  8. #宏变量存储目标js的URL列表
  9. URL_LIST = []
  10. cookies=['放置自己的cookies']
  11. '''
  12. URL链接中的_ksTS,callback参数的解析
  13. _ksTS=1526545121518_1881
  14. callback=jsonp1882
  15. '''
  16. t=str(time.time()).split('.')
  17. print(t[0],t[1])
  18. #生成链接列表
  19. def get_url(num):
  20. # urlFront = 'https://rate.tmall.com/list_detail_rate.htm?itemId=10905215461&spuId=273210686&sellerId=525910381&order=3&currentPage='
  21. url='https://rate.tmall.com/list_detail_rate.htm?itemId=597319717047&spuId=1216294042&sellerId=2201435095942&order=3&currentPage='
  22. urlRear = '&append=0&content=1&tagId=&posi=&picture=&groupId=&ua=098%23E1hvHQvRvpQvUpCkvvvvvjiPRLqp0jlbn2q96jD2PmPWsjn2RL5wQjnhn2cysjnhR86CvC8h98KKXvvveSQDj60x0foAKqytvpvhvvCvp86Cvvyv9PPQt9vvHI4rvpvEvUmkIb%2BvvvRCiQhvCvvvpZptvpvhvvCvpUyCvvOCvhE20WAivpvUvvCC8n5y6J0tvpvIvvCvpvvvvvvvvhZLvvvvtQvvBBWvvUhvvvCHhQvvv7QvvhZLvvvCfvyCvhAC03yXjNpfVE%2BffCuYiLUpVE6Fp%2B0xhCeOjLEc6aZtn1mAVAdZaXTAdXQaWg03%2B2e3rABCCahZ%2Bu0OJooy%2Bb8reEyaUExreEKKD5HavphvC9vhphvvvvGCvvpvvPMM3QhvCvmvphmCvpvZzPQvcrfNznswOiaftlSwvnQ%2B7e9%3D&needFold=0&_ksTS=1552466697082_2019&callback=jsonp2020'
  23. for i in range(0,num):
  24. URL_LIST.append(url+str(1+i)+urlRear)
  25. #获取评论数据
  26. def get_content(num):
  27. #循环获取每一页评论
  28. for i in range(num):
  29. #头文件,没有头文件会返回错误的js
  30. headers = {
  31. 'cookie':cookies[0],
  32. 'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
  33. 'referer': 'https://detail.tmall.com/item.htm?spm=a1z10.5-b-s.w4011-17205939323.51.30156440Aer569&id=41212119204&rn=06f66c024f3726f8520bb678398053d8&abbucket=19&on_comment=1&sku_properties=134942334:3226348',
  34. 'accept': '*/*',
  35. 'accept-encoding':'gzip, deflate, br',
  36. 'accept-language': 'zh-CN,zh;q=0.9'
  37. }
  38. #解析JS文件内容
  39. print('第{}页'.format(i+1))
  40. # print(URL_LIST[i])
  41. content = requests.get(URL_LIST[i],headers=headers).text
  42. data=re.findall(r'{.*}',content)[0]
  43. data=json.loads(data)
  44. # print(data)
  45. items=data['rateDetail']['rateList']
  46. D=[]
  47. for item in items:
  48. product=item['auctionSku']
  49. name=item['displayUserNick']
  50. content=item['rateContent']
  51. times=item['rateDate']
  52. data=[product,name,content,times]
  53. D.append(data)
  54. save_csv(D)
  55. def save_csv(data):
  56. with open('./text.csv', 'a', encoding='utf-8',newline='')as file:
  57. writer = csv.writer(file)
  58. writer.writerows(data)
  59. #主函数
  60. if __name__ == "__main__":
  61. header = ['产品','评论人','评论内容','评论时间']
  62. with open('text.csv', 'a',encoding='utf-8',newline='')as f:
  63. write=csv.writer(f)
  64. write.writerow(header)
  65. page=100
  66. get_url(page)
  67. # 获取评论页数
  68. get_content(100)

在爬取的时候必须加上cookies才能获取数据,可以选择自己的cookies来测试一下,爬取的结果如下所示:


少侠别走,作为数据分析师,怎么只能简单的爬取数据就完事了呢,怎么着也得简单的分析一下啦,做个词云图什么的啦。

上面词云图只提供参考,毕竟只爬取了160天评论,想要做详细的分析可以爬取完整,

当然了,图形可以换,字体也可以换,词频也可以统计,这里就不做过多描述。

参考代码:

  1. import pandas as pd
  2. import jieba
  3. import time
  4. import csv
  5. import re
  6. from wordcloud import WordCloud
  7. from PIL import Image
  8. import matplotlib.pyplot as plt
  9. import numpy as np
  10. df=pd.read_csv('./olay.csv',encoding='utf-8')
  11. print(df['评论内容'])
  12. items=df['评论内容'].astype(str).tolist()
  13. # 创建停用词list
  14. def stopwordslist():
  15. stopwords = [line.strip() for line in open('./stop_word.txt', 'r', encoding='utf-8').readlines()]
  16. return stopwords
  17. # 去除英文,数字等其他特殊符号
  18. def remove_sub(input_str):
  19. # 去除数字
  20. shuzi=u'123456789.'
  21. # 去除字母
  22. zimu = u'a-zA-Z'
  23. output_str = re.sub(r'[{}]+'.format(shuzi), '', input_str)
  24. return output_str
  25. def main():
  26. outstr = ''
  27. for item in items:
  28. b=jieba.cut(item,cut_all=False)
  29. # 创建一个停用词表
  30. stopwords=stopwordslist()
  31. for j in b:
  32. if j not in stopwords:
  33. if not remove_sub(j):
  34. continue
  35. if j !='\t':
  36. outstr+=j
  37. outstr+=" "
  38. return outstr
  39. alice_mask = np.array(Image.open('./0.png'))
  40. cloud = WordCloud(
  41. #设置字体,不指定就会出现乱码
  42. font_path="./ziti.ttf",
  43. #font_path=path.join(d,'simsun.ttc'),
  44. #设置背景色
  45. background_color='white',
  46. #词云形状
  47. mask=alice_mask,
  48. #允许最大词汇
  49. max_words=200,
  50. #最大号字体
  51. max_font_size=200,
  52. random_state=1,
  53. width=400,
  54. height=800
  55. )
  56. cloud.generate(main())
  57. cloud.to_file('./pic1.png')

觉得不错的话,可以关注一下我的公众号喽


随着大数据的时代的到来,数据变得越来越重要,数据可以帮助我们来看清行业的本质,也可以帮助我们更加快速的了解一个行业,关注公众号——DT学说,走进数据的时代

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号