爬取京东商城用户评论(福利)

我们常常看到一些有关充气娃娃的表情包和图片或新闻,但是这种东西很少会像一些小视频一些相互交流,大家可能都是偷摸玩耍。所以猪哥相信其实大部分同学并没有亲身体验过充气娃娃到底是什么感觉(包括猪哥),所以猪哥很好奇究竟是什么一种体验?真的如传言中那样爽吗?
在这里插入图片描述

功能描述

基于很多人没有体验过充气娃娃是什么感觉,但是又很好奇,所以希望通过爬虫+数据分析的方式直观而真实的告诉大家(下图为成品图)。
在这里插入图片描述
在这里插入图片描述

技术方案

为了实现上面的需求以及功能,我们来讨论下具体的技术实现方案:

  • 分析某东评论数据请求
  • 使用requests库抓取某东的充气娃娃评论
  • 使用词云做数据展示

技术实现

上以某东商品编号为:1263013576的商品为对象,进行数据分析,我们来看看详细的技术实现步骤吧!

1.分析并获取评论接口的URL

第一步:打开某东的商品页,搜索你想研究的商品。

第二步:我们在页面中鼠标右键选择检查(或F12)调出浏览器的调试窗口。
在这里插入图片描述
第三步:调出浏览器后点击评论按钮使其加载数据,然后我们点击network查看数据。

第四步:查找加载评论数据的请求url,我们可以使用某条评论中的一段话,然后在调试窗口中搜索。
在这里插入图片描述
经过这几步, 我们就拿到了商品评论的接口
https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv5584&productId=1263013576&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&fold=1

2.爬取评论数据

拿到评论数据接口url之后,我们就可以开始写代码抓取数据了。一般我们会先尝试抓取一条数据,成功之后,我们再去分析如何实现大量抓取。

两个请求头Referer和User-Agent,那我们先把他们加到代码的请求头中,
在这里插入图片描述

3.数据提取

接着,解析数据,由于拿到的是一个字符串,并且是有规则的,如下
在这里插入图片描述
我们可以将获取的信息读取并切片,并将json数据转换为dict, 发现我们要的数据在comments中的content中,然后打开文件写入
在这里插入图片描述

5.批量爬取

我们这里就使用多线程来批量爬取,批量方式可以自行选择
** 要找到规律:每次url中的page数字就代表的是第几页, 那么我们可以使用range,格式化输出url **
在这里插入图片描述

6.数据清洗

数据成功保存之后我们需要对数据进行分词清洗,对于分词我们使用著名的分词库jieba。
在这里插入图片描述

7.生成词云

生成词云我们需要用到numpy、matplotlib、wordcloud、Pillow这几个库,大家先自行下载。matplotlib库用于图像处理,wordcloud库用于生成词云。
在这里插入图片描述
最终结果:
在这里插入图片描述

附录

需要安装的包:

pip install requests  # 爬虫模块
pip install jieba  # 分词
pip install wordcloud  # 词云
pip install numpy  # 数据处理
pip install matplotlib  # 图像绘制
pip install Pillow  # 图片处理

全代码

import requests
import json
import os
import jieba
import threading
import time
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image


import wordcloud


def main():
    # url2 = """https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv5584&productId=1263013576&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&fold=1"""
    # parse(url2)
    url_list = []
    # 遍历100页
    for i in range(1, 100):
        url = "https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv5584&productId=1263013576&score=0&sortType=5&page=%s&pageSize=10&isShadowSku=0&fold=1" % i
        # 加入子线程
        t1 = threading.Thread(target=parse, args=(url,))
        # 开启子线程
        t1.start()
        # parse(url)

def parse(url):
    # print(url)
    # headers 反爬虫,referer 跳转来自哪个网页
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
        "Referer": "https://item.jd.com/1263013576.html"
    }

    time.sleep(2)
    # 代理ip,已过期,请自行百度
    proxies = {
        "http": "http://117.90.5.25:9000"

    }
    # request.get(url, proxies=proxies)
    response = requests.get(url, headers=headers, proxies=proxies)
    print(response)
    ret = response.text[26:-2]
    
    json_str = json.loads(ret)
    
    data1 = json_str["comments"]

    with open("content.txt", "a")as f:
        for temp in data1:
            data = temp["content"]
            print(temp)
            f.write(data+'\n')


def cut_word():
    with open("content.txt", 'r') as f:
        data = f.read()
        wordlist = jieba.cut(data, cut_all=True)
        # print(wordlist)
        wl = " ".join(wordlist)
        return wl

def create_wordcloud():
    coloring = np.array(Image.open("wawa.jpeg")) # 这里的wawa.jpeg 自行找个图片就行,将会按照图片的形状绘图
    # 设置词云的配置,字体,背景色,词云形状,大小
    wc = wordcloud.WordCloud(background_color="white", max_words=2000, mask=coloring, scale=4, max_font_size=50, random_state=42, font_path="/Library/Fonts/Songti.ttc")
    # 生成词云
    wc.generate(cut_word())
    plt.imshow(wc, interpolation="bilinear")
    plt.axis("off")
    plt.figure()
    plt.show()

    # print(ret.decode("GBK"))
    # print(ret)
if __name__ == '__main__':
    if os.path.exists("content.txt"):
        os.remove("content.txt")
    main()
    # time.sleep(5)
    # create_wordcloud()

    

总结:

  • 如何分析并找出加载数据的url
  • 如何使用requests库的headers解决Referer和User-Agent反扒技术
  • 如何找出分页参数实现批量爬取
  • 设置代理ip防止被封
  • 数据的提取与保存到文件
  • 使用jieba库对数据分词清洗
  • 使用wordcloud生成指定形状的词云
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值