Skip to content

Commit 497da07

Browse files
authored
Add files via upload
1 parent 39efde1 commit 497da07

File tree

2 files changed

+452
-0
lines changed

2 files changed

+452
-0
lines changed

auto_comment_plus.py

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
# -*- coding: utf-8 -*-
2+
# @Time : 2022/2/8 20:50
3+
# @Author : @qiu-lzsnmb and @Dimlitter
4+
# @File : auto_comment_plus.py
5+
6+
import random
7+
import time
8+
import jieba.analyse
9+
import requests
10+
from lxml import etree
11+
import jdspider
12+
13+
jieba.setLogLevel(jieba.logging.INFO)
14+
"""
15+
ck填到下面就好,只支持网页版的Ck
16+
以下为最短格式
17+
"""
18+
ck = ''
19+
20+
headers = {
21+
'cookie': ck,
22+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36',
23+
}
24+
25+
26+
# 评价生成
27+
def generation(pname, _class=0, _type=1):
28+
list = ['商品名']
29+
list.clear()
30+
list.append(pname)
31+
for item in list:
32+
spider = jdspider.JDSpider(item)
33+
result = spider.getData(3, 3) #这里可以自己改
34+
35+
# 0是追评 1是评价
36+
# class 0是评价 1是提取id
37+
try:
38+
name = jieba.analyse.textrank(pname, topK=5, allowPOS='n')[0]
39+
except:
40+
name = "宝贝"
41+
if _class == 1:
42+
return name
43+
else:
44+
datas = {
45+
1: {
46+
"开始": result,
47+
"中间": result, #重复的几率不大,相信我(
48+
"结束": result
49+
},
50+
0: {
51+
"开始": result,
52+
"中间": result,
53+
"结束": result
54+
}
55+
}
56+
if _type == 1:
57+
comments = datas[_type]
58+
return random.randint(3, 5), (
59+
random.choice(comments["开始"]) + random.choice(comments["中间"]) + random.choice(comments["结束"])).replace(
60+
"$", name)
61+
elif _type == 0:
62+
comments = datas[_type]
63+
return (
64+
random.choice(comments["开始"]) + random.choice(comments["中间"]) + random.choice(comments["结束"])).replace(
65+
"$", name)
66+
67+
68+
# 查询全部评价
69+
def all_evaluate():
70+
N = {}
71+
url = 'https://club.jd.com/myJdcomments/myJdcomment.action?'
72+
req = requests.get(url, headers=headers)
73+
req_et = etree.HTML(req.text)
74+
evaluate_data = req_et.xpath('//*[@id="main"]/div[2]/div[1]/div/ul/li')
75+
# print(evaluate)
76+
for i, ev in enumerate(evaluate_data):
77+
na = ev.xpath('a/text()')[0]
78+
try:
79+
num = ev.xpath('b/text()')[0]
80+
except IndexError:
81+
num = 0
82+
N[na] = int(num)
83+
return N
84+
85+
86+
# 普通评价
87+
def ordinary(N):
88+
Order_data = []
89+
req_et = []
90+
for i in range((N['待评价订单'] // 20) + 1):
91+
url = f'https://club.jd.com/myJdcomments/myJdcomment.action?sort=0&page={i + 1}'
92+
req = requests.get(url, headers=headers)
93+
req_et.append(etree.HTML(req.text))
94+
for i in req_et:
95+
Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tbody'))
96+
if len(Order_data) != N['待评价订单']:
97+
Order_data = []
98+
for i in req_et:
99+
Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table'))
100+
101+
print(f"当前共有{N['待评价订单']}个评价。")
102+
for i, Order in enumerate(Order_data):
103+
oid = Order.xpath('tr[@class="tr-th"]/td/span[3]/a/text()')[0]
104+
oname_data = Order.xpath('tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/text()')
105+
pid_data = Order.xpath('tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/@href')
106+
for oname, pid in zip(oname_data, pid_data):
107+
pid = pid.replace('//item.jd.com/', '').replace('.html', '')
108+
109+
print(f"\t{i}.开始评价订单\t{oname}[{oid}]")
110+
url2 = f"https://club.jd.com/myJdcomments/saveProductComment.action"
111+
xing,Str = generation(oname)
112+
xing = 5 #写死五星
113+
print(f'\t\t评价内容,星级{xing}:', Str)
114+
data2 = {
115+
'orderId': oid,
116+
'productId': pid, # 商品id
117+
'score': str(xing), # 商品几星
118+
'content': bytes(Str, encoding="gbk"), # 评价内容
119+
'saveStatus': '1',
120+
'anonymousFlag': '1'
121+
}
122+
pj2 = requests.post(url2, headers=headers, data=data2)
123+
time.sleep(20)
124+
N['待评价订单'] -= 1
125+
return N
126+
127+
128+
# 晒单评价
129+
def sunbw(N):
130+
Order_data = []
131+
for i in range((N['待晒单'] // 20) + 1):
132+
url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=1&page={i + 1}"
133+
req = requests.get(url, headers=headers)
134+
req_et = etree.HTML(req.text)
135+
Order_data.extend(req_et.xpath('//*[@id="evalu01"]/div[2]/div[1]/div[@class="comt-plist"]/div[1]'))
136+
print(f"当前共有{N['待晒单']}个需要晒单。")
137+
for i, Order in enumerate(Order_data):
138+
oname = Order.xpath('ul/li[1]/div/div[2]/div[1]/a/text()')[0]
139+
pid = Order.xpath('@pid')[0]
140+
oid = Order.xpath('@oid')[0]
141+
142+
print(f'\t开始晒单{i},{oname}')
143+
# 获取图片
144+
pname = generation(pname=oname, _class=1)
145+
url1 = f"https://club.jd.com/discussion/getProductPageImageCommentList.action?productId={pid}"
146+
imgdata = requests.get(url1, headers=headers).json()
147+
if imgdata["imgComments"]["imgCommentCount"] == 0:
148+
url1 = "https://club.jd.com/discussion/getProductPageImageCommentList.action?productId=1190881"
149+
imgdata = requests.get(url1, headers=headers).json()
150+
imgurl = imgdata["imgComments"]["imgList"][0]["imageUrl"]
151+
152+
#
153+
print(f'\t\t图片url={imgurl}')
154+
url2 = "https://club.jd.com/myJdcomments/saveShowOrder.action" # 提交晒单
155+
headers['Referer'] = 'https://club.jd.com/myJdcomments/myJdcomment.action?sort=1'
156+
headers['Origin'] = 'https://club.jd.com'
157+
headers['Content-Type'] = 'application/x-www-form-urlencoded'
158+
data = {
159+
'orderId': oid,
160+
'productId': pid,
161+
'imgs': imgurl,
162+
'saveStatus': 3
163+
}
164+
req_url2 = requests.post(url2, data={
165+
'orderId': oid,
166+
'productId': pid,
167+
'imgs': imgurl,
168+
'saveStatus': 3
169+
}, headers=headers)
170+
print('完成')
171+
time.sleep(50)
172+
N['待晒单'] -= 1
173+
return N
174+
175+
176+
# 追评
177+
def review(N):
178+
req_et = []
179+
Order_data = []
180+
for i in range((N['待追评'] // 20) + 1):
181+
url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=3&page={i + 1}"
182+
req = requests.get(url, headers=headers)
183+
req_et.append(etree.HTML(req.text))
184+
for i in req_et:
185+
Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]'))
186+
if len(Order_data) != N['待追评']:
187+
for i in req_et:
188+
Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]'))
189+
print(f"当前共有{N['待追评']}个需要追评。")
190+
for i, Order in enumerate(Order_data):
191+
oname = Order.xpath('td[1]/div/div[2]/div/a/text()')[0]
192+
_id = Order.xpath('td[3]/div/a/@href')[0]
193+
print(f'\t开始第{i}{oname}')
194+
url1 = "https://club.jd.com/afterComments/saveAfterCommentAndShowOrder.action"
195+
pid, oid = _id.replace('http://club.jd.com/afterComments/productPublish.action?sku=', "").split('&orderId=')
196+
context = generation(oname, _type=0)
197+
print(f'\t\t追评内容:{context}')
198+
req_url1 = requests.post(url1, headers=headers, data={
199+
'orderId': oid,
200+
'productId': pid,
201+
'content': bytes(context, encoding="gbk"),
202+
'anonymousFlag': 1,
203+
'score': 5
204+
})
205+
print('完成')
206+
time.sleep(30)
207+
N['待追评'] -= 1
208+
return N
209+
210+
211+
# 服务评价
212+
def Service_rating(N):
213+
Order_data = []
214+
req_et = []
215+
for i in range((N['服务评价'] // 20) + 1):
216+
url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=4&page={i + 1}"
217+
req = requests.get(url, headers=headers)
218+
req_et.append(etree.HTML(req.text))
219+
for i in req_et:
220+
Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]'))
221+
if len(Order_data) != N['服务评价']:
222+
Order_data = []
223+
for i in req_et:
224+
Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]'))
225+
print(f"当前共有{N['服务评价']}个需要服务评价。")
226+
for i, Order in enumerate(Order_data):
227+
oname = Order.xpath('td[1]/div[1]/div[2]/div/a/text()')[0]
228+
oid = Order.xpath('td[4]/div/a[1]/@oid')[0]
229+
print(f'\t开始第{i}{oname}')
230+
url1 = f'https://club.jd.com/myJdcomments/insertRestSurvey.action?voteid=145&ruleid={oid}'
231+
data1 = {
232+
'oid': oid,
233+
'gid': '32',
234+
'sid': '186194',
235+
'stid': '0',
236+
'tags': '',
237+
'ro591': f'591A{random.randint(4, 5)}', # 商品符合度
238+
'ro592': f'592A{random.randint(4, 5)}', # 店家服务态度
239+
'ro593': f'593A{random.randint(4, 5)}', # 快递配送速度
240+
'ro899': f'899A{random.randint(4, 5)}', # 快递员服务
241+
'ro900': f'900A{random.randint(4, 5)}' # 快递员服务
242+
}
243+
pj1 = requests.post(url1, headers=headers, data=data1)
244+
print("\t\t", pj1.text)
245+
time.sleep(25)
246+
N['服务评价'] -= 1
247+
return N
248+
249+
250+
def No():
251+
print()
252+
N = all_evaluate()
253+
for i in N:
254+
print(i, N[i], end="----")
255+
print()
256+
return N
257+
258+
259+
def main():
260+
print("开始京东批量评价!")
261+
N = No()
262+
if not N:
263+
print('Ck出现错误,请重新抓取!')
264+
exit()
265+
if N['待评价订单'] != 0:
266+
print("1.开始普通评价")
267+
N = ordinary(N)
268+
N = No()
269+
if N['待晒单'] != 0:
270+
print("2.开始晒单评价")
271+
N = sunbw(N)
272+
N = No()
273+
if N['待追评'] != 0:
274+
print("3.开始批量追评!")
275+
N = review(N)
276+
N = No()
277+
if N['服务评价'] != 0:
278+
print('4.开始服务评价')
279+
N = Service_rating(N)
280+
N = No()
281+
print("全部完成啦!")
282+
for i in N:
283+
if N[i] != 0:
284+
print("出现了二次错误,跳过了部分,重新尝试")
285+
main()
286+
287+
288+
if __name__ == '__main__':
289+
try:
290+
main()
291+
except RecursionError:
292+
print("多次出现未完成情况,程序自动退出")

0 commit comments

Comments
 (0)