|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]完整的爬虫代码(可以复制直接使用哦~)
源码:
宣传
下方二维码是我的微信公众号(懂的都懂)
写文章不易,求评分~,求评分~,求评分~
给各位看官大佬磕头了
|
评分
-
查看全部评分
|