原文链接写个淘宝商品数据小爬虫怎么样?mp.weixin.qq.com简介好久没在自己的开源模拟登录库中加入爬虫小案例了,周末给大家带来淘宝商品数据爬虫小案例。顺便把抓取的数据按照老规矩可视化。废话不多说,愉快的开始吧~开发工具Python版本:3.6.4相关模块:DecryptLogin模块;图表模块;以及Python自带的一些模块。由于数据爬取是模拟登录相关的爬虫小case,自然先实现淘宝的模拟登录。这里还是使用我们开源的DecryptLogin库来实现,就三行代码:'''模拟登录淘宝'''@staticmethoddeflogin():lg=login.Login()infos_return,session=lg.taobao()returnsession另外,顺便提一句,经常有人要我在DecryptLogin库中加入cookies持久化功能。其实可以自己多写两行代码:ifos.path.isfile('session.pkl'):self.session=pickle.load(open('session.pkl','rb'))else:self.session=TBGoodsCrawler.login()f=open('session.pkl','wb')pickle.dump(self.session,f)f.close()我真的不想在这个里加这个功能library,后面想补充一些其他爬虫相关的功能,这个以后再说。好了,跑题了,言归正传。接下来我们就去网页版淘宝抢一波包吧。比如用F12打开开发者工具后,在淘宝的商品搜索栏随便输入一些东西,像这样:搜索全局搜索之类的关键词,可以找到如下链接:看返回的是什么数据:好像是的应该是对的。另外,如果小伙伴们在实战中没有找到这个接口api,可以试试点击右上角的下一页产品按钮:这样,你一定能抓到这个请求接口。经过简单的测试可以发现,虽然请求该接口需要的参数很多,但实际上必须提交的参数只有两个,即:q:产品名称s:当前页码的偏移量。好了,根据这个接口,以及我们的测试结果,现在我们就可以愉快的开始淘宝商品数据的抓取了。具体来说,主要代码实现如下:'''外部调用'''defrun(self):search_url='https://s.taobao.com/search?'whileTrue:goods_name=input('请输入要抓取的产品信息名称:')offset=0page_size=44goods_infos_dict={}page_interval=random.randint(1,5)page_pointer=0whileTrue:params={'q':goods_name,'ajax':'true','ie':'utf8','s':str(offset)}response=self.session.get(search_url,params=params)if(response.status_code!=200):breakresponse_json=response.json()all_items=response_json.get('mods',{}).get('itemlist',{}).get('data',{}).get('拍卖',[])iflen(all_items)==0:breakforiteminall_items:ifnotitem['category']:continuegoods_infos_dict.update({len(goods_infos_dict)+1:{'shope_name':item.get('nick',''),'title':item.get('raw_title',''),'pic_url':item.get('pic_url',''),'detail_url':item.get('detail_url',''),'price':item.get('view_price',''),'location':item.get('item_loc',''),'fee':item.get('view_fee',''),'num_comments':item.get('comment_count',''),'num_sells':item.get('view_sales','')}})print(goods_infos_dict)self.__save(goods_infos_dict,goods_name+'.pkl')offset+=page_size如果offset//page_size>100:breakpage_pointer+=1ifpage_pointer==page_interval:time.sleep(random.randint(30,60)+random.random()*10)page_interval=random.randint(1,5)page_pointer=0else:time.sleep(random.random()+2)print('[INFO]:关于%s之后的产品数据抓取完成,一共抓取了%s条数据...'%(goods_name,len(goods_infos_dict)))就这么简单,大功告成。最后我们看一下代码的运行效果:见:https://zhuanlan.zhihu.com/p/...数据可视化这里可视化我们抓取的一波奶茶数据。再来看看淘宝奶茶商户的全国分布情况:没想到,广东的奶茶店最多。T_T来看看淘宝销量前10的奶茶店:以及淘宝评价最多的10家奶茶店:来看看这几家需要包邮和不需要包邮的商品占比shops:最后再看看奶茶相关产品的价格区间:今天差不多是这样了。相关文件https://github.com/CharlesPika
