# -*- coding: utf-8 -*- # @Time : 2021/10/23 17:39 import random import time import jieba.analyse import requests from lxml import etree jieba.setLogLevel(jieba.logging.INFO) """ ck填到下面就好,只支持网页版的Ck 以下为最短格式 """ ck ="thor=95BFB1058214FB7F4B1E4C951E0AFFFBBFD79949CC270AAF8246A08763513D5E640D33F21D8194A00F9DF4D957E9F8C67305F2942353B11C5FA863EF77FF8A4AA47CD602FFF15C7078D67C7AAB593CA9C4064371; pinId=0aUnkgfkpvWEOEn53JhiMw;" headers = { 'cookie': ck, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', } # 评价生成 def generation(pname, _class=0, _type=1): # 0是追评 1是评价 # class 0是评价 1是提取id try: name = jieba.analyse.textrank(pname, topK=5, allowPOS='n')[0] except: name = "宝贝" if _class == 1: return name else: datas = { 1: { "开始": [ "考虑买这个$之前我是有担心过的,因为我不知道$的质量和品质怎么样,但是看了评论后我就放心了。", "买这个$之前我是有看过好几家店,最后看到这家店的评价不错就决定在这家店买 ", "看了好几家店,也对比了好几家店,最后发现还是这一家的$评价最好。", "看来看去最后还是选择了这家。", "之前在这家店也买过其他东西,感觉不错,这次又来啦。", "这家的$的真是太好用了,用了第一次就还想再用一次。" ], "中间": [ "收到货后我非常的开心,因为$的质量和品质真的非常的好!", "拆开包装后惊艳到我了,这就是我想要的$!", "快递超快!包装的很好!!很喜欢!!!", "包装的很精美!$的质量和品质非常不错!", "收到快递后迫不及待的拆了包装。$我真的是非常喜欢", "真是一次难忘的购物,这辈子没见过这么好用的东西!!" ], "结束": [ "经过了这次愉快的购物,我决定如果下次我还要买$的话,我一定会再来这家店买的。", "不错不错!", "我会推荐想买$的朋友也来这家店里买", "真是一次愉快的购物!", "大大的好评!以后买$再来你们店!( ̄▽ ̄)", "大家可以买来试一试,真的是太爽了,一晚上都沉浸在爽之中" ] }, 0: { "开始": [ "用了这么久的 $ ,东西是真的好用,真的难忘上一次购买时使用的激动,", "使用了几天 $ ", "这是我买到的最好用的$ ", "我草,是真的好用啊,几天的体验下来,真是怀恋当初购买时下单的那一刻的激动!!!!!!!!!", "我草,用了几天下来,$ 变得好大好大,这精致的外观,这细腻的皮肤,摸上去,真是令人激动!", "$ 这小家伙,真是太令人愉悦了,用了都说好好好好!", "不用睡不着觉,这家店的 $ 真是太好用了。", "真是牛逼啊,一天不用难受一天,用了一天难受一年!" ], "中间": [ "东西还行,", "确实是好东西,推荐大家购买,", "$ 的质量真的非常不错!", "$ 真是太好用了,真是个宝贝,难忘的宝贝!!", "$ 短短几天的体验,令人一生难忘", "$ 用了这么久了,它长的真是太可爱了", "这可真是个小宝贝!", "五星好评,安排上,太好用拉!!!" ], "结束": [ "推荐大家来尝试", "这家店给我对于$能做成这样刷新了世界观!", "真是一次愉快的购物!", "以后买$还来这家店,就没见过这么好用的东西!", "下次还来这家店买 $ ,就没见过这么牛逼的东西", "东西很好,孩子很喜欢", "现在睡觉都抱着 $ 睡觉,真是太好用了", "令人难玩的一次购物" ] } } if _type == 1: # return 5, '东西很好,孩子很喜欢,每天晚上不抱着碎觉,就完全睡不着。买的时候看见评论里都说好就买了,看到发货的时候挺激动的,到了之后,满怀期待一激动得从快递员那里拿回了寝室,试一下,结果挺不错啊!而且客服小姐姐也特别的好,很有礼貌,客服小姐姐也是秒回我的疑问呢,嘻嘻,下次还会回购哒。' comments = datas[_type] return random.randint(3, 5), ( random.choice(comments["开始"]) + random.choice(comments["中间"]) + random.choice(comments["结束"])).replace( "$", name) elif _type == 0: comments = datas[_type] return ( random.choice(comments["开始"]) + random.choice(comments["中间"]) + random.choice(comments["结束"])).replace( "$", name) # 查询全部评价 def all_evaluate(): N = {} url = 'https://club.jd.com/myJdcomments/myJdcomment.action?' req = requests.get(url, headers=headers) req_et = etree.HTML(req.text) evaluate_data = req_et.xpath('//*[@id="main"]/div[2]/div[1]/div/ul/li') # print(evaluate) for i, ev in enumerate(evaluate_data): na = ev.xpath('a/text()')[0] try: num = ev.xpath('b/text()')[0] except IndexError: num = 0 N[na] = int(num) return N # 普通评价 def ordinary(N): Order_data = [] req_et = [] for i in range((N['待评价订单'] // 20) + 1): url = f'https://club.jd.com/myJdcomments/myJdcomment.action?sort=0&page={i + 1}' req = requests.get(url, headers=headers) req_et.append(etree.HTML(req.text)) for i in req_et: Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tbody')) if len(Order_data) != N['待评价订单']: Order_data = [] for i in req_et: Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table')) print(f"当前共有{N['待评价订单']}个评价。") for i, Order in enumerate(Order_data): oid = Order.xpath('tr[@class="tr-th"]/td/span[3]/a/text()')[0] oname_data = Order.xpath('tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/text()') pid_data = Order.xpath('tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/@href') for oname, pid in zip(oname_data, pid_data): pid = pid.replace('//item.jd.com/', '').replace('.html', '') print(f"\t{i}.开始评价订单\t{oname}[{oid}]") url2 = f"https://club.jd.com/myJdcomments/saveProductComment.action" xing, Str = generation(oname) print(f'\t\t评价内容,星级{xing}:', Str) data2 = { 'orderId': oid, 'productId': pid, # 商品id 'score': str(xing), # 商品几星 'content': bytes(Str, encoding="gbk"), # 评价内容 'saveStatus': '1', 'anonymousFlag': '1' } pj2 = requests.post(url2, headers=headers, data=data2) time.sleep(2) N['待评价订单'] -= 1 return N # 晒单评价 def sunbw(N): Order_data = [] for i in range((N['待晒单'] // 20) + 1): url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=1&page={i + 1}" req = requests.get(url, headers=headers) req_et = etree.HTML(req.text) Order_data.extend(req_et.xpath('//*[@id="evalu01"]/div[2]/div[1]/div[@class="comt-plist"]/div[1]')) print(f"当前共有{N['待晒单']}个需要晒单。") for i, Order in enumerate(Order_data): oname = Order.xpath('ul/li[1]/div/div[2]/div[1]/a/text()')[0] pid = Order.xpath('@pid')[0] oid = Order.xpath('@oid')[0] print(f'\t开始晒单{i},{oname}') # 获取图片 pname = generation(pname=oname, _class=1) url1 = f"https://club.jd.com/discussion/getProductPageImageCommentList.action?productId={pid}" imgdata = requests.get(url1, headers=headers).json() if imgdata["imgComments"]["imgCommentCount"] == 0: url1 = "https://club.jd.com/discussion/getProductPageImageCommentList.action?productId=1190881" imgdata = requests.get(url1, headers=headers).json() imgurl = imgdata["imgComments"]["imgList"][0]["imageUrl"] # print(f'\t\t图片url={imgurl}') url2 = "https://club.jd.com/myJdcomments/saveShowOrder.action" # 提交晒单 headers['Referer'] = 'https://club.jd.com/myJdcomments/myJdcomment.action?sort=1' headers['Origin'] = 'https://club.jd.com' headers['Content-Type'] = 'application/x-www-form-urlencoded' data = { 'orderId': oid, 'productId': pid, 'imgs': imgurl, 'saveStatus': 3 } req_url2 = requests.post(url2, data={ 'orderId': oid, 'productId': pid, 'imgs': imgurl, 'saveStatus': 3 }, headers=headers) # print(f'\t\t\t{req_url2.text}') print('完成') time.sleep(5) N['待晒单'] -= 1 return N # 追评 def review(N): req_et = [] Order_data = [] for i in range((N['待追评'] // 20) + 1): url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=3&page={i + 1}" req = requests.get(url, headers=headers) req_et.append(etree.HTML(req.text)) for i in req_et: Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]')) if len(Order_data) != N['待追评']: for i in req_et: Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]')) print(f"当前共有{N['待追评']}个需要追评。") for i, Order in enumerate(Order_data): oname = Order.xpath('td[1]/div/div[2]/div/a/text()')[0] _id = Order.xpath('td[3]/div/a/@href')[0] # date = Order.xpath('td[2]/div/text()')[0] print(f'\t开始第{i},{oname}') url1 = "https://club.jd.com/afterComments/saveAfterCommentAndShowOrder.action" pid, oid = _id.replace('http://club.jd.com/afterComments/productPublish.action?sku=', "").split('&orderId=') context = generation(oname, _type=0) print(f'\t\t追评内容:{context}') req_url1 = requests.post(url1, headers=headers, data={ 'orderId': oid, 'productId': pid, 'content': bytes(context, encoding="gbk"), 'anonymousFlag': 1, 'score': 5 }) # print(f'\t\t\tr{req_url1.text}') print('完成') time.sleep(2) N['待追评'] -= 1 return N # 服务评价 def Service_rating(N): Order_data = [] req_et = [] for i in range((N['服务评价'] // 20) + 1): url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=4&page={i + 1}" req = requests.get(url, headers=headers) req_et.append(etree.HTML(req.text)) for i in req_et: Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]')) if len(Order_data) != N['服务评价']: Order_data = [] for i in req_et: Order_data.extend(i.xpath('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]')) print(f"当前共有{N['服务评价']}个需要服务评价。") for i, Order in enumerate(Order_data): oname = Order.xpath('td[1]/div[1]/div[2]/div/a/text()')[0] oid = Order.xpath('td[4]/div/a[1]/@oid')[0] print(f'\t开始第{i},{oname}') url1 = f'https://club.jd.com/myJdcomments/insertRestSurvey.action?voteid=145&ruleid={oid}' data1 = { 'oid': oid, 'gid': '32', 'sid': '186194', 'stid': '0', 'tags': '', 'ro591': f'591A{random.randint(3, 5)}', # 商品符合度 'ro592': f'592A{random.randint(3, 5)}', # 店家服务态度 'ro593': f'593A{random.randint(3, 5)}', # 快递配送速度 'ro899': f'899A{random.randint(3, 5)}', # 快递员服务 'ro900': f'900A{random.randint(3, 5)}' # 快递员服务 } pj1 = requests.post(url1, headers=headers, data=data1) print("\t\t", pj1.text) time.sleep(5) N['服务评价'] -= 1 return N def No(): print() N = all_evaluate() for i in N: print(i, N[i], end="----") print() return N def main(): print("开始京东批量评价!") N = No() if not N: print('Ck出现错误,请重新抓取!') exit() if N['待评价订单'] != 0: print("1.开始普通评价") N = ordinary(N) N = No() if N['待晒单'] != 0: print("2.开始晒单评价") N = sunbw(N) N = No() if N['待追评'] != 0: print("3.开始批量追评!") N = review(N) N = No() if N['服务评价'] != 0: print('4.开始服务评价') N = Service_rating(N) N = No() print("全部完成啦!") for i in N: if N[i] != 0: print("出现了二次错误,跳过了部分,重新尝试") main() if __name__ == '__main__': try: main() except RecursionError: print("多次出现未完成情况,程序自动退出")
京东自动评价
176 min read