|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小伤口 于 2021-4-5 20:01 编辑
京东帮帮怪
程序简介
1 爬取京东评论,绘制成词云
2 爬取最近销量(评论)并用 matplotlib 绘制(京东评论数量即销量)
3 爬取商品信息加用户晒出的商品图片
4 将爬取的信息放在 Tkinter (也要用多线程,防止界面无响应)做的界面上,
以此帮助用户更直观的分析商品 。
界面
使用教程
注:由于打包 exe 总是失败,所以这个程序并没有 exe 文件
0 安装相关模块(这里统一用 pip 安装):
requests 模块:用于爬取商品评论,照片,信息等
BeautifulSoup 模块:用于提取数据
matplotlib 模块:用于绘制图表
wordcloud 模块:用于绘制词云
1 打开程序:
下载
这个压缩文件 。点击鼠标右键,选择解压文件 。然后解压到你想要解压的位置
完成之后,打开这个文件 。
用鼠标双击上图所示的文件
2 运行程序:
找到你想要查询的商品,复制下图箭头指的网络链接
ctrl + v 将链接粘贴到下图所示位置,点击开始搜索
等待加载.....
当出现如下页面时运行成功(一定要刷新页面哦~)
2 程序布局:
[b]点击程序右上角的
可以不断查看各种用户发的图片
[/b]
点击查看图片可以更清晰的观看图片
使用说明:
原理讲解
网上爬取京东评论的方法,发现爬取的大半都是好评论,并不能起到太大分析的作用
所以经过筛查发现
这个 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[i])
复制代码
绘制折线图
- 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()[/b]
复制代码
[b]完整的爬虫代码(可以复制直接使用哦~)
源码:
宣传
下方二维码是我的微信公众号(懂的都懂)
写文章不易,求评分~,求评分~,求评分~
给各位看官大佬磕头了
|
评分
-
查看全部评分
|