66import logging
77import random
88import re
9- import sys
109import time
1110from urllib .parse import quote , urlencode
1211
1312import requests
1413import zhon .hanzi
1514from lxml import etree
1615
17- # import pymysql
18-
1916
2017class JDSpider :
2118 # 爬虫实现类:传入商品类别(如手机、电脑),构造实例。然后调用getData爬取数据。
@@ -27,18 +24,18 @@ def __init__(self, categlory):
2724 self .headers = {
2825 'accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' ,
2926 'accept-encoding' : 'gzip, deflate, br' ,
30- 'accept-language' :'zh-CN,zh;q=0.9' ,
27+ 'accept-language' : 'zh-CN,zh;q=0.9' ,
3128 'cache-control' : 'max-age=0' ,
32- 'dnt' :'1' ,
29+ 'dnt' : '1' ,
3330 'sec-ch-ua' : '" Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"' ,
3431 'sec-ch-ua-mobile' : '?0' ,
3532 'sec-ch-ua-platform' : '"Windows"' ,
3633 'sec-fetch-dest' : 'document' ,
37- 'sec-fetch-site' :'none' ,
34+ 'sec-fetch-site' : 'none' ,
3835 'sec-fetch-user' : '?1' ,
3936 'upgrade-insecure-requests' : '1' ,
4037 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
41- }
38+ }
4239 self .productsId = self .getId ()
4340 self .comtype = {1 : "nagetive" , 2 : "medium" , 3 : "positive" }
4441 self .categlory = categlory
@@ -87,9 +84,9 @@ def getData(self, maxPage, score,): # maxPage是爬取评论的最大页数,
8784 for j in range (sum ):
8885 id = self .productsId [j ]
8986 header = self .getHeaders (id )
90- for i in range (1 ,maxPage ):
91- param ,url = self .getParamUrl (id ,i , score )
92- print ("正在爬取评论信息>>>>>>>>>第:%d 个,第 %d 页" % (j ,i ))
87+ for i in range (1 , maxPage ):
88+ param , url = self .getParamUrl (id , i , score )
89+ print ("正在爬取评论信息>>>>>>>>>第:%d 个,第 %d 页" % (j , i ))
9390 try :
9491 response = requests .get (url , headers = header , params = param )
9592 except Exception as e :
@@ -123,33 +120,33 @@ def getData(self, maxPage, score,): # maxPage是爬取评论的最大页数,
123120 # 存入列表,简单处理评价
124121 remarks = []
125122 for i in range (len (comments )):
126- rst = re .findall (zhon .hanzi .sentence ,comments [i ])
123+ rst = re .findall (zhon .hanzi .sentence , comments [i ])
127124 if len (rst ) == 0 or rst == ['。' ] or rst == ['?' ] or rst == ['!' ] or rst == ['.' ] or rst == [',' ] or rst == ['?' ] or rst == ['!' ]:
128- logging .warning ("拆分失败或结果不符(去除空格和标点符号):%s" % (rst ))
125+ logging .warning ("拆分失败或结果不符(去除空格和标点符号):%s" % (rst ))
129126 else :
130127 remarks .append (rst )
131128 result = self .solvedata (remarks = remarks )
132- if len (result )== 0 :
129+ if len (result ) == 0 :
133130 logging .warning ("当前商品没有评价,使用默认评价" )
134131 result = ["考虑买这个$之前我是有担心过的,因为我不知道$的质量和品质怎么样,但是看了评论后我就放心了。" ,
135- "买这个$之前我是有看过好几家店,最后看到这家店的评价不错就决定在这家店买 " ,
136- "看了好几家店,也对比了好几家店,最后发现还是这一家的$评价最好。" ,
137- "看来看去最后还是选择了这家。" ,
138- "之前在这家店也买过其他东西,感觉不错,这次又来啦。" ,
139- "这家的$的真是太好用了,用了第一次就还想再用一次。" ,
140- "收到货后我非常的开心,因为$的质量和品质真的非常的好!" ,
141- "拆开包装后惊艳到我了,这就是我想要的$!" ,
142- "快递超快!包装的很好!!很喜欢!!!" ,
143- "包装的很精美!$的质量和品质非常不错!" ,
144- "收到快递后迫不及待的拆了包装。$我真的是非常喜欢" ,
145- "真是一次难忘的购物,这辈子没见过这么好用的东西!!" ,
146- "经过了这次愉快的购物,我决定如果下次我还要买$的话,我一定会再来这家店买的。" ,
147- "不错不错!" ,
148- "我会推荐想买$的朋友也来这家店里买" ,
149- "真是一次愉快的购物!" ,
150- "大大的好评!以后买$再来你们店!( ̄▽ ̄)" ,
151- "真是一次愉快的购物!"
152- ]
132+ "买这个$之前我是有看过好几家店,最后看到这家店的评价不错就决定在这家店买 " ,
133+ "看了好几家店,也对比了好几家店,最后发现还是这一家的$评价最好。" ,
134+ "看来看去最后还是选择了这家。" ,
135+ "之前在这家店也买过其他东西,感觉不错,这次又来啦。" ,
136+ "这家的$的真是太好用了,用了第一次就还想再用一次。" ,
137+ "收到货后我非常的开心,因为$的质量和品质真的非常的好!" ,
138+ "拆开包装后惊艳到我了,这就是我想要的$!" ,
139+ "快递超快!包装的很好!!很喜欢!!!" ,
140+ "包装的很精美!$的质量和品质非常不错!" ,
141+ "收到快递后迫不及待的拆了包装。$我真的是非常喜欢" ,
142+ "真是一次难忘的购物,这辈子没见过这么好用的东西!!" ,
143+ "经过了这次愉快的购物,我决定如果下次我还要买$的话,我一定会再来这家店买的。" ,
144+ "不错不错!" ,
145+ "我会推荐想买$的朋友也来这家店里买" ,
146+ "真是一次愉快的购物!" ,
147+ "大大的好评!以后买$再来你们店!( ̄▽ ̄)" ,
148+ "真是一次愉快的购物!"
149+ ]
153150 return result
154151
155152 def solvedata (self , remarks ):
0 commit comments