- 有没有遇到过,在网上购物的时候,经常下不了手呢?买前老会先看评分,然后看评论一看就是几十页,上百页。恨自己阅读能力不行哈?最后还是放回购物车!现在python分析来了,帮你轻松处理购物商品,当然钱要自己掏 - -!。
爬虫模块
-
first:数据来源,京东商品评论
咱们来分析一波把,老规矩还是要炒一下冷饭,京东商城评论的数据是以json返回的,打开google浏览器,进入开发者模式上图
其实现在基本的网站数据都是异步加载进来的。这里再啰嗦几句,你可以复制这段url用浏览器打开是可以访问的。
如果类似这种呢,你看一下
如果你遇到这种url是被处理过的,带了特么多的参数,而且是访问不了的,每次刷新url的参数就会改变,这种不是要绝人之路吗?现在我告诉你,方法在数据森麟公众号里面有,爬链家房子的时候,那种slenium自动化爬虫就no problem! -
接下来我们看一下京东商品json请求头
我们首先来分析,完成后继续构造一下请求地址,并且使用GET请求方法,这时候你要学会找规律
url_header = 'https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv14678&productId=100000822981&score=0&sortType=5&page='
url_tail = '&pageSize=10&isShadowSku=0&rid=0&fold=1'
page = "这是第几页的意思"
完成的请求地址其实就是url_header+page+url_tail,然后就是…
for page in range(20):
url_mate20 = url_header+str(page)+url_tail
res = requests.get(url_mate20,headers=headers)
json_data = res.text
#对json数据处理,前期记得 import json,需要对返回的json数据预先处理好
#很多新手对json数据比较笼统的可以先大致了解一下json的格式
json_load = json.loads(json_data[27:-2])
comment = (json_load['comments'])
#把评论内容遍历完后保存到本地的“txt”文件中,
for com_data in comment:
#根据自己的文件路径保存,注意带参数"a",如果是w就会覆盖原有内容,这样子你只能得一条评论
JD_mate20 = open('C:\\Users\\chineon\\Desktop\\JD_mate20.txt','a')
JD_mate20.write('%s\n'%com_data['content'])
JD_mate20.close()
#你可以不用打印出来,可有可无
print(com_data['content'])
这样子抓取京东商城 华为mate20 的手机20页评论内容就over了
代码太短了,不好意思交差啊。那我们就写个多进程把,同时运行三个
其实这两个是一样得方法,接下来我就来写个多进程,前期记得from multiprocessing import Process
这里利用Process的start()方法
if __name__ == '__main__':
mate_20 = Process(target=JD_mate20) #进程
iphonex = Process(target=JD_iphoneX) #进程
redmi_8 = Process(target=JD_redmi8) #进程
mate_20.start()
iphonex.start()
redmi_8.start()
运行一下程序,iphonex,mate20,小米8得手机评论就OK了,爬虫这时候就告一段落哈!
分析模块
说实话,对于分析我还是初懂,因为平常工作有闲暇的空子,就多学习了一波,前段时间还因为多维数组的问题搞到半夜去了,多学习是好的,建议大家要入门的先看免费教程,不花钱,学习的东西也不少,有时候人家是过来人就会多多少少有其他的见解,就像这“两人骑驴的故事”。
-
进入正题
数据已经有了,当时光有源数据是不行,还得以可视化得方式展示出来,这次我采用词云的形式展示给大家,东西好坏评价不是一个人说了算的,所以数据越多就越准确。我把图片截图下来了,先来看一下展示的结果把
-
首先看iphonex,用户评论频繁出现的关键词“运行速度”,“面部识别”,“电池续航”,“非常满意”,等的大字体,说明苹果手机的性能跟智能真的不是吹的哦,还有就是大家注意到没有?“京东物流”,看来京东物流也不是盖的,这个主要还是京东根据各地区而建设的仓库也是分不开的。
-
其次看华为的mate20,用户评论频繁出现的“系统流畅”,“拍照效果”,“性能强悍”,“后置指纹”,“运行速度”,还有游戏。确实是国产手机top1,不比iPhone差多少,而且适用的人群广,无论是游戏达人,拍照达人,高逼格达人都非常的适合。
-
最后看小米8,用户评论频繁出现的“手机”,“不错”,“性价比”,“拍照”等。确实跟前两位大哥相比,有点力不从心,这次没看到关键词“发烧”有点说不过去,当然小米也是很受大众喜爱的。
-
接下来就看一下怎么来生成词云
我用的matplotlib,以及jieba跟wordcloud,如果你的环境没有安装的提前安装一下,
windows打开命令行使用pip来安装,偶尔可能有些同学装了python然而没配置环境变量的就会报错,这方面对刚开始学习python的同学提醒一下。
首先打开文件
#读取爬虫保存下载的数据
file_text = open('C:\\Users\\85106\\Desktop\\JD_spiders\\JD_xiaomi8.txt','r').read()
#再使用jieba来处理剪切我们爬取文本内容
cut_text = jieba.cut(file_text)
#继续处理对剪过的文本以空格拼接起来,注意一下这里“”有空格的
result = " ".join(cut_text)
接下来就是词云效果的设置了,
wc = WordCloud(
font_path='simhei.ttf', #字体的路劲
background_color='black', #背景颜色
width=1200,
height=600,
max_font_size=150, #字体的大小
min_font_size=30, #字体的大小
max_words=1000
)
然后就是展示,保存了
w_cloud.generate(result)
w_cloud.to_file('xiaomi8_wordcloud.png') #图片保存
#图片展示
plt.figure('xiaomi8') #图片显示的名字,根据自己来定义
plt.imshow(w_c)
plt.axis('off') #关闭坐标
plt.show()
大功告成,现在就很清晰知道人们对不同手机的评论频繁出现的次数,字体越大表示越多。
最后还是要提醒一下:如果你想抓取京东商城的更多评论,例如100页,1000页,最好是请求不要太频繁,防止被封,出现请求成功但是不返回数据的情况,过段时间又可以恢复访问
一般同学,就会想,那我就在我的代码中添加time.sleep()让程序睡眠呗,请求不要太快就行,没错,这可能也行,但是如果在真实工作中,老板要让你明天交付5000万数据或者更多呢?
- 这时候我们就要来使用代理了,这时有人就说封MAC地址呢?那我们就搭建多台机器呗!别忘了我可是运维工程师,方法总会有的。哈哈
获取代理,我是用的是芝麻HTTP
这也是我在百度上搜来的,不是打广告,这家代理操作很简单 我贴个代码出来让大家看一下
def get_proxy():
#在服务商的官网获取的API接口,然后就提供一个URL给你,我这个是免费的
url = 'http://webapi.http.zhimacangku.com/getip?num=20&type=3&pro=0&city=0&yys=0&port=11&pack=39821&ts=0&ys=0&cs=0&lb=2&sb=0&pb=45&mr=1®ions='
#发起请求
responses = requests.get(url)
html_ip = responses.text
#对返回的HTML格式处理一下
ip_list = html_ip.split('</br>')
#随机抽取一个代理IP
#proxy_ip = random.choice(ip_list)
#可以自己打印出来看一下
print(ip_list)
这样就获得带端口的代理IP了,简单吧!这些免费代理IP有时限!可以自己去看一下,我记得是IP使用的时候就开始计时。
整篇文章就写到这里,感谢阅读,有不好的地方望多多指教一下。