55
66import random
77import time
8+
89import jieba .analyse
910import requests
11+ import yaml
1012from lxml import etree
13+
1114import jdspider
1215
16+
17+ CONFIG_PATH = './config.yml'
18+
19+
1320jieba .setLogLevel (jieba .logging .INFO )
14- """
15- ck填到下面就好,只支持网页版的Ck
16- 以下为最短格式
17- """
18- ck = ''
21+
22+
23+ with open ( CONFIG_PATH , 'r' , encoding = 'utf-8' ) as f :
24+ cfg = yaml . safe_load ( f )
25+ ck = cfg [ 'user' ][ 'cookie' ]
1926
2027headers = {
2128 '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' ,
29+ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/'
30+ '537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/'
31+ '537.36'
2332}
2433
2534
@@ -35,7 +44,7 @@ def generation(pname, _class=0):
3544 # class 0是评价 1是提取id
3645 try :
3746 name = jieba .analyse .textrank (pname , topK = 5 , allowPOS = 'n' )[0 ]
38- except :
47+ except Exception as _ :
3948 name = "宝贝"
4049 if _class == 1 :
4150 return name
@@ -50,6 +59,7 @@ def generation(pname, _class=0):
5059 return 5 , (
5160 comments .replace ("$" , name ))
5261
62+
5363# 查询全部评价
5464def all_evaluate ():
5565 N = {}
@@ -73,7 +83,8 @@ def ordinary(N):
7383 Order_data = []
7484 req_et = []
7585 for i in range ((N ['待评价订单' ] // 20 ) + 1 ):
76- url = f'https://club.jd.com/myJdcomments/myJdcomment.action?sort=0&page={ i + 1 } '
86+ url = (f'https://club.jd.com/myJdcomments/myJdcomment.action?sort=0&'
87+ f'page={ i + 1 } ' )
7788 req = requests .get (url , headers = headers )
7889 req_et .append (etree .HTML (req .text ))
7990 for i in req_et :
@@ -86,14 +97,16 @@ def ordinary(N):
8697 print (f"当前共有{ N ['待评价订单' ]} 个评价。" )
8798 for i , Order in enumerate (Order_data ):
8899 oid = Order .xpath ('tr[@class="tr-th"]/td/span[3]/a/text()' )[0 ]
89- oname_data = Order .xpath ('tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/text()' )
90- pid_data = Order .xpath ('tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/@href' )
100+ oname_data = Order .xpath (
101+ 'tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/text()' )
102+ pid_data = Order .xpath (
103+ 'tr[@class="tr-bd"]/td[1]/div[1]/div[2]/div/a/@href' )
91104 for oname , pid in zip (oname_data , pid_data ):
92105 pid = pid .replace ('//item.jd.com/' , '' ).replace ('.html' , '' )
93106
94107 print (f"\t { i } .开始评价订单\t { oname } [{ oid } ]" )
95- url2 = f "https://club.jd.com/myJdcomments/saveProductComment.action"
96- xing ,Str = generation (oname )
108+ url2 = "https://club.jd.com/myJdcomments/saveProductComment.action"
109+ xing , Str = generation (oname )
97110 print (f'\t \t 评价内容,星级{ xing } :' , Str )
98111 data2 = {
99112 'orderId' : oid ,
@@ -113,10 +126,12 @@ def ordinary(N):
113126def sunbw (N ):
114127 Order_data = []
115128 for i in range ((N ['待晒单' ] // 20 ) + 1 ):
116- url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=1&page={ i + 1 } "
129+ url = (f'https://club.jd.com/myJdcomments/myJdcomment.action?sort=1'
130+ f'&page={ i + 1 } ' )
117131 req = requests .get (url , headers = headers )
118132 req_et = etree .HTML (req .text )
119- Order_data .extend (req_et .xpath ('//*[@id="evalu01"]/div[2]/div[1]/div[@class="comt-plist"]/div[1]' ))
133+ Order_data .extend (req_et .xpath (
134+ '//*[@id="evalu01"]/div[2]/div[1]/div[@class="comt-plist"]/div[1]' ))
120135 print (f"当前共有{ N ['待晒单' ]} 个需要晒单。" )
121136 for i , Order in enumerate (Order_data ):
122137 oname = Order .xpath ('ul/li[1]/div/div[2]/div[1]/a/text()' )[0 ]
@@ -126,17 +141,21 @@ def sunbw(N):
126141 print (f'\t 开始晒单{ i } ,{ oname } ' )
127142 # 获取图片
128143 pname = generation (pname = oname , _class = 1 )
129- url1 = f"https://club.jd.com/discussion/getProductPageImageCommentList.action?productId={ pid } "
144+ url1 = (f'https://club.jd.com/discussion/getProductPageImageCommentList'
145+ f'.action?productId={ pid } ' )
130146 imgdata = requests .get (url1 , headers = headers ).json ()
131147 if imgdata ["imgComments" ]["imgCommentCount" ] == 0 :
132- url1 = "https://club.jd.com/discussion/getProductPageImageCommentList.action?productId=1190881"
148+ url1 = ('https://club.jd.com/discussion/getProductPageImage'
149+ 'CommentList.action?productId=1190881' )
133150 imgdata = requests .get (url1 , headers = headers ).json ()
134151 imgurl = imgdata ["imgComments" ]["imgList" ][0 ]["imageUrl" ]
135152
136153 #
137154 print (f'\t \t 图片url={ imgurl } ' )
138- url2 = "https://club.jd.com/myJdcomments/saveShowOrder.action" # 提交晒单
139- headers ['Referer' ] = 'https://club.jd.com/myJdcomments/myJdcomment.action?sort=1'
155+ # 提交晒单
156+ url2 = "https://club.jd.com/myJdcomments/saveShowOrder.action"
157+ headers ['Referer' ] = ('https://club.jd.com/myJdcomments/myJdcomment.'
158+ 'action?sort=1' )
140159 headers ['Origin' ] = 'https://club.jd.com'
141160 headers ['Content-Type' ] = 'application/x-www-form-urlencoded'
142161 data = {
@@ -162,21 +181,27 @@ def review(N):
162181 req_et = []
163182 Order_data = []
164183 for i in range ((N ['待追评' ] // 20 ) + 1 ):
165- url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=3&page={ i + 1 } "
184+ url = (f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=3"
185+ f"&page={ i + 1 } " )
166186 req = requests .get (url , headers = headers )
167187 req_et .append (etree .HTML (req .text ))
168188 for i in req_et :
169- Order_data .extend (i .xpath ('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]' ))
189+ Order_data .extend (
190+ i .xpath ('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]' ))
170191 if len (Order_data ) != N ['待追评' ]:
171192 for i in req_et :
172- Order_data .extend (i .xpath ('//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]' ))
193+ Order_data .extend (i .xpath (
194+ '//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]' ))
173195 print (f"当前共有{ N ['待追评' ]} 个需要追评。" )
174196 for i , Order in enumerate (Order_data ):
175197 oname = Order .xpath ('td[1]/div/div[2]/div/a/text()' )[0 ]
176198 _id = Order .xpath ('td[3]/div/a/@href' )[0 ]
177199 print (f'\t 开始第{ i } ,{ oname } ' )
178- url1 = "https://club.jd.com/afterComments/saveAfterCommentAndShowOrder.action"
179- pid , oid = _id .replace ('http://club.jd.com/afterComments/productPublish.action?sku=' , "" ).split ('&orderId=' )
200+ url1 = ("https://club.jd.com/afterComments/"
201+ "saveAfterCommentAndShowOrder.action" )
202+ pid , oid = _id .replace (
203+ 'http://club.jd.com/afterComments/productPublish.action?sku=' ,
204+ "" ).split ('&orderId=' )
180205 context = generation (oname )
181206 print (f'\t \t 追评内容:{ context } ' )
182207 req_url1 = requests .post (url1 , headers = headers , data = {
@@ -197,21 +222,25 @@ def Service_rating(N):
197222 Order_data = []
198223 req_et = []
199224 for i in range ((N ['服务评价' ] // 20 ) + 1 ):
200- url = f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=4&page={ i + 1 } "
225+ url = (f"https://club.jd.com/myJdcomments/myJdcomment.action?sort=4"
226+ f"&page={ i + 1 } " )
201227 req = requests .get (url , headers = headers )
202228 req_et .append (etree .HTML (req .text ))
203229 for i in req_et :
204- Order_data .extend (i .xpath ('//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]' ))
230+ Order_data .extend (i .xpath (
231+ '//*[@id="main"]/div[2]/div[2]/table/tbody/tr[@class="tr-bd"]' ))
205232 if len (Order_data ) != N ['服务评价' ]:
206233 Order_data = []
207234 for i in req_et :
208- Order_data .extend (i .xpath ('//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]' ))
235+ Order_data .extend (i .xpath (
236+ '//*[@id="main"]/div[2]/div[2]/table/tr[@class="tr-bd"]' ))
209237 print (f"当前共有{ N ['服务评价' ]} 个需要服务评价。" )
210238 for i , Order in enumerate (Order_data ):
211239 oname = Order .xpath ('td[1]/div[1]/div[2]/div/a/text()' )[0 ]
212240 oid = Order .xpath ('td[4]/div/a[1]/@oid' )[0 ]
213241 print (f'\t 开始第{ i } ,{ oname } ' )
214- url1 = f'https://club.jd.com/myJdcomments/insertRestSurvey.action?voteid=145&ruleid={ oid } '
242+ url1 = (f'https://club.jd.com/myJdcomments/insertRestSurvey.action'
243+ f'?voteid=145&ruleid={ oid } ' )
215244 data1 = {
216245 'oid' : oid ,
217246 'gid' : '32' ,
@@ -273,4 +302,4 @@ def main():
273302 try :
274303 main ()
275304 except RecursionError :
276- print ("多次出现未完成情况,程序自动退出" )
305+ print ("多次出现未完成情况,程序自动退出" )
0 commit comments