小伤口 发表于 2021-4-5 20:01:20

【Tkinter*】多线程爬取京东商品,并做可视化处理

本帖最后由 小伤口 于 2021-4-5 20:01 编辑

京东帮帮怪

程序简介

1 爬取京东评论,绘制成词云

2 爬取最近销量(评论)并用 matplotlib 绘制(京东评论数量即销量)

3 爬取商品信息加用户晒出的商品图片

4 将爬取的信息放在 Tkinter (也要用多线程,防止界面无响应)做的界面上,

以此帮助用户更直观的分析商品 。

界面




使用教程

注:由于打包 exe 总是失败,所以这个程序并没有 exe 文件

0 安装相关模块(这里统一用 pip 安装):

requests 模块:用于爬取商品评论,照片,信息等
pip install requests

BeautifulSoup 模块:用于提取数据
pip install bs4

matplotlib 模块:用于绘制图表
pip install matplotlib

wordcloud 模块:用于绘制词云
pip install wordcloud

1 打开程序:

下载京东帮帮.rar

这个压缩文件 。点击鼠标右键,选择解压文件 。然后解压到你想要解压的位置

完成之后,打开京东帮帮怪这个文件 。



用鼠标双击上图所示的文件

2 运行程序:

找到你想要查询的商品,复制下图箭头指的网络链接





ctrl + v 将链接粘贴到下图所示位置,点击开始搜索





等待加载.....




当出现如下页面时运行成功(一定要刷新页面哦~)





2 程序布局:





点击程序右上角的换张图片
可以不断查看各种用户发的图片



点击查看图片可以更清晰的观看图片




使用说明:



原理讲解

网上爬取京东评论的方法,发现爬取的大半都是好评论,并不能起到太大分析的作用
所以经过筛查发现productPage...
这个 js 文件里面的网址通过修改相应的参数可以爬取好评,中评,差评和最新评论数等 。
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=1914356&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1
由于单线程爬取过慢,不能让用户等太久,况且很容易被封 IP 所以就用多线程实现
导入import queue
import threading
创建多线程(爬取时间的就不放了哈~)
# 创建多线程
class MyThread(threading.Thread):
    def __init__(self, q):
      threading.Thread.__init__(self)
      self.q = q

    # 调用get_index()
    def run(self) -> None:
      self.get_index()

    def get_index(self):

      url = self.q.get()

      # 加请求头
      headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
      res = requests.get(url, headers=headers)

      jd = json.loads(res.text.lstrip("jQuery593159(").rstrip(");"))

      with open("data.txt", "a", encoding="utf-8") as file:
            for i in jd['comments']:
                file.write(i['content'] + '\n')

            try:
                for each in i['images']:
                  photo = each['imgUrl'].split('//')
                  photo = photo[-1]
                  photo = 'https://' + photo
                  print(photo)
                  zhao_pian.append(photo)
            except:
                pass
爬取评论我用了 5 个线程
所以用for i in range(5):
    locals()['MyThread_' + str(i)] = MyThread
创建了 5 个线程省去一些重复代码 。
虽然用了多线程但还是不能在短时间内爬取所有评论 。由于京东评论数即销量,
所以爬取最新评论的时间,按月来作为 x 轴的单位,将同一个月评论的时间相加作为每个
月的销量即 y 轴
代码实现:
#将时间提取出来,并进行排序计数
    with open("data2.txt") as file:
      for line in file.readlines():
            dict_data.append(int(line))
    dict_data.sort()
    dic = collections.Counter(dict_data)
    for i in dic:
      dict_data2.append(str(i))
      dict_data3.append(dic)
绘制折线图
x = np.array(dict_data2)
    y = np.array(dict_data3)
    fig=plt.figure(figsize=(25, 10))
    fig.patch.set_facecolor('Turquoise')
    ax = fig.add_subplot(111)
    ax.patch.set_facecolor('DeepSkyBlue')
    plt.plot(x, y, 'r')# 折线 1 x 2 y 3 color
    plt.plot(x, y, 'red', lw=2)# 4 line w
    plt.scatter(x, y, color='red', marker='o')
    font = FontProperties(fname="mnjzbh.ttf")
    plt.title("销售趋势(按时间顺序)", fontsize=24,fontproperties=font)
    plt.xlabel("时间(年,月)", fontsize=14,fontproperties=font)
    plt.ylabel("销售数量(件)", fontsize=14,fontproperties=font)
    plt.savefig('Figure_1.png', bbox_inches='tight')
    plt.show()
完整的爬虫代码(可以复制直接使用哦~)
**** Hidden Message *****
源码:
**** Hidden Message *****
宣传
下方二维码是我的微信公众号(懂的都懂)


写文章不易,求评分~,求评分~,求评分~
{:9_221:} {:9_221:} {:9_221:}
给各位看官大佬磕头了
{:9_224:} {:9_224:} {:9_224:}

糖甜弯了嘴 发表于 2021-4-6 00:46:36

https://www.bilibili.com/video/BV1qV411n7Jz?share_source=copy_web
求三连~
(主要是挂件要到期了,想混点积分{:10_266:} 。)

昨非 发表于 2021-4-5 20:04:43

芜湖~

小伤口 发表于 2021-4-5 20:15:38

昨非 发表于 2021-4-5 20:04
芜湖~

谢谢大佬的每次支持
让俺才一直有动力{:9_221:}
{:9_221:}

昨非 发表于 2021-4-5 20:16:39

小伤口 发表于 2021-4-5 20:15
谢谢大佬的每次支持
让俺才一直有动力

我不是大佬,这玩意我写起来怕是费劲多了{:10_250:}

昨非 发表于 2021-4-5 20:18:40

小伤口 发表于 2021-4-5 20:15
谢谢大佬的每次支持
让俺才一直有动力

真的只是比你能水罢了{:10_250:}

小伤口 发表于 2021-4-5 20:22:50

昨非 发表于 2021-4-5 20:18
真的只是比你能水罢了

每个月帮好多鱼友解决问题,还会多种语言,单片机。我还早呢{:10_266:}

昨非 发表于 2021-4-5 20:31:01

小伤口 发表于 2021-4-5 20:22
每个月帮好多鱼友解决问题,还会多种语言,单片机。我还早呢

我会个屁啊{:10_285:}

hrp 发表于 2021-4-5 21:07:12

大...大佬{:10_247:}

yayc_zcyd 发表于 2021-4-5 21:09:42

小伤口厉害了~

putuo3 发表于 2021-4-5 21:37:32

优秀!点赞先

yayc_zcyd 发表于 2021-4-5 21:46:13

{:10_256:}

heishali 发表于 2021-4-5 22:00:18

膜拜大佬

old_叶 发表于 2021-4-5 22:43:21

厉害厉害 ,能秒杀东西吗?

小伤口 发表于 2021-4-5 22:47:42

old_叶 发表于 2021-4-5 22:43
厉害厉害 ,能秒杀东西吗?

不行{:10_319:},
秒杀的话selenium应该挺容易实现{:10_275:}

小伤口 发表于 2021-4-5 22:48:52

hrp 发表于 2021-4-5 21:07
大...大佬

真...过奖了{:10_266:}
谢谢大佬支持

小伤口 发表于 2021-4-5 22:49:52

yayc_zcyd 发表于 2021-4-5 21:09
小伤口厉害了~

小伤口太疼了{:10_254:}

Daniel_Zhang 发表于 2021-4-6 03:34:43

{:10_245:}

Daniel_Zhang 发表于 2021-4-6 03:36:40

昨非 发表于 2021-4-5 20:04
芜湖~

笔趣阁那个进度咋样啦{:10_297:}

crisfo 发表于 2021-4-6 08:20:39

厉害,厉害!
像大佬学习{:5_106:}
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 【Tkinter*】多线程爬取京东商品,并做可视化处理