手把手教你使用Python打造一个智能搜索淘宝商品,生成操作日志的系统

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

  与天地兮比寿,与日月兮齐光。

/1 前言/

    随着网购的兴起,使得很多传统店铺转型做线上生意,电子商务的产生极大便利了我们的生活。

/2 项目目标/

    通过Python程序一键搜索并直达目的地,爬取淘宝商品链接,商品名称,及商品的图片链接,并将每次的操作 记录在日志文件里。

/3 项目准备/

    采用sublime text 3编辑器 编写程序,先看看程序运行后的主界面:

/4 项目实现/

1、分析页面结构并将商品信息放到各自列表中,就拿下面这个店铺为例。

2、老样子,F12 ,因为我们要找的是店铺的商品链接,所以我们尽可能找多的商品,从店铺的布局来看,好像就宝贝推荐这个板块的商品较多,所以,我们今天就爬这个板块内的所有内容。


3、图中的 1,2,3步即是我们要爬的商品各种信息,可以看出商品全在class为photo的dt标签内,所以我们需要将他们提取出来。
         try:


              urllib3.disable_warnings()  #从urllib3中消除警告


              #网页请求


              rep=requests.get(self.e2.get(),verify=False,timeout=4) #证书验证设为FALSE,设置访问延时


              rep.encoding='gbk'


              soup=BeautifulSoup(rep.content,'html.parser')


              result=soup.find_all('dt',class_='photo') #获取到所有class为photo的dt元素


              for x in result:


                    tt=x.find_all('a')  #获取dt下的所有子元素a


                    for y in tt:


                          for x in y:


                               ab=x.find_next_siblings('img') #获取所有的下一个兄弟元素img


                               for z in ab:


                                     \#将商品名称和商品图片链接添加到列表aa和bb中


                                     aa.append(z['alt'])


                                     bb.append('https:'+z['data-ks-lazyload'])


                          cc.append('https:'+y['href'])#将商品链接添加到列表cc中


         except:


              return   

这样我们就轻松获取到了,商品的链接,商品名,商品图片链接,然后将他们分别保存在aa,bb,cc列表中。

/5 编写GUI界面,交互友好/

    为了使运行结果更加美观,我们需要制作一个GUI界面,这就不得不提Python内置GUI神器 tkinter了。

    好了,言归正传,我们编写交互式界面可以将他封装为一个类,这样更美观。

class page:


   def __init__(self):     


         self.ti=dt.now().strftime("%Y/%m/%d %H:%S:%M") 


         self.root= tk.Tk()   #初始化窗口


         self.root.title('淘宝获取商家宝贝V1.0')  #窗口名称


         self.root.geometry("700x700")  #设置窗口大小


         self.root.iconbitmap('q.ico')


         self.root.resizable(width=True,height=True) #设置窗口是否可变,宽不可变,高可变,默认为True


         \#创建标签,文字,背景颜色,字体(颜色,大小),标签的高和宽


         self.label1 =tk.Label(self.root,text='店铺首页:',font=('宋体',10),width=12,height=2)


         \#创建输入框,标签高度,字体大小颜色,内容显示方式


         self.e2 = tk.Entry(self.root,width=30,show=None, font=('Arial', 12))  # 显示成明文形式


         self.label2 =tk.Label(self.root,text='淘宝直达:',font=('宋体',10),width=12,height=2)


         self.e1 = tk.Entry(self.root,width=30,show=None, font=('Arial', 12))


         \#创建按钮 内容  宽高  按钮绑定事件


         self.b1 = tk.Button(self.root, text='解析页面', width=8,height=1,command=self.parse)


         self.b2 =tk.Button(self.root, text='生成excel', width=8,height=1,command=self.sc)


         self.b3 =tk.Button(self.root, text='淘宝搜索', width=8,height=1,command=self.search)


         self.b4 =tk.Button(self.root, text='关闭程序', width=8,height=1,command=self.close)


         self.b5 =tk.Button(self.root, text='保存日志', width=8,height=1,command=self.log)


         \#创建文本框


         self.te=tk.Text(self.root,height=40)


         self.label1.place(x=140,y=30,anchor='nw')


         self.label2.place(x=138,y=70,anchor='nw')  


         \#将所有部件添加到界面中


         self.e1.place(x=210,y=74,anchor='nw')


         self.e2.place(x=210,y=34,anchor='nw')


         self.b1.place(x=160,y=110,anchor='nw')


         self.b2.place(x=240,y=110,anchor='nw')


         self.b3.place(x=320,y=110,anchor='nw')


         self.b4.place(x=400,y=110,anchor='nw')


         self.b5.place(x=480,y=110,anchor='nw')


         self.te.place(x=40,y=170,anchor='nw')


         \#设置输入框开始文本


         self.e1.delete(0, "end")


         self.e1.insert(0, "请输入要搜索的商品")


         self.root.mainloop()

这样就算是创建好GUI界面了,效果图如下:

/6 输入目标店铺首页地址,生成数据并导出Excel和记录日志/

1、通过输入淘宝店铺首页地址来得到数据,所以我们需要对程序进行一个判断处理,因为我们都是将他封装在类中的,所以需在每个函数括号里加入一个self,代码如下:

# 解析网页内容




def parse(self):


       self.res() 


       if self.e2.get()=='': #判断输入框的值是否为空值


             \#插入值到文本框


             self.te.insert('insert','              。。。。请 输 入 网 址 。。。。\n')


       elif str(self.e2.get()).find('taobao.com')==-1 or aa=='':


             self.te.insert('insert','              。。。。地址不正确 。。。。\n')


       else:


             self.te.insert("insert","解析目标网页:%s\n\n"%self.e2.get())


             self.te.insert("insert","             。。。。。解 析 开 始 :。。。。。\n") #INSERT索引表示插入光标当前的位置


             self.te.insert("insert","\n\n")


             for x,y,z in zip(aa,bb,cc): #将数据所在列表合并


                  result=x+'\n'+y+'\n'+z+'\n\n'


                  self.te.insert("insert",result,"\n\n") #插入到文本框


             self.te.insert("insert","\n\n") #插入空格


             self.te.insert("end","解析完毕。。。。。\n")

2、生成Excel文件,代码如下:

# 保存结果到excel


def sc(self):


       self.te.insert("insert","             。。。。。开 始 生 成 :。。。。。\n") 


       av={'时间':self.ti,'商品名称':aa,'商品链接':cc,'商品图片链接':bb}


       \#生成dataframe 多维数组


       df=p.DataFrame(av,columns=['时间','商品名称','商品链接','商品图片链接'],index=range(len(aa)))


       df.to_excel('22.xlsx', sheet_name='taobao') #生成excel


       self.te.insert("end","            。。。。生 成 完 毕。。。。。\n")

代码运行之后,得到下图效果:

3、生成日志文件,代码如下:

# 保存日志
def log(self):


       ss=str(self.te.get(0.0,'end')).split('\n') #分隔文本框内容


       with open('1.txt','w',encoding='utf8') as f:   #保存日志


             for y in range(len(ss)):


                  rea=str(self.ti)+ss[y]+'\n'


                  f.write(rea)

代码运行之后,得到下图效果:

/8 快捷搜索淘宝商品网页直达程序关闭/

    要想一键搜索淘宝商品首先我们的找到淘宝的搜索地址,然后在进行get请求,给他传不同的值即可。一般搜索会涉及到一个关键字search。

    这里我们先找到淘宝的搜索入口,地址为:

https://s.taobao.com/search?q=

    然后再在后面传值即可,因为我们是要在浏览器中浏览,所以需要使用webbrowser这个模块,专门负责访问页面,他的用法是webbrowser.open(url)。

    所以代码如下:

# 搜索商品
def search(self):


  self.te.insert("insert","             。。。。。打开浏览器 :。。。。。\n") 


  wb.open('https://s.taobao.com/search?q='+self.e1.get()) #打开 浏览器

最后就是关闭程序了。代码如下:

# 关闭程序
def close(self):


  self.te.insert("insert","             。。。。。关闭程序 :。。。。。\n")


  self.root.destroy()  #销毁窗口

/9 小结/

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。
2、本文基于Python网络爬虫,利用爬虫库,打造了一款简易的智能淘宝搜索系统,并且可以操作生成日志。
3、这个系统看似很简单,实则对于新手小白是个不小的挑战,甚至有些大佬也很容易掉坑,主要这个网页分析有点复杂多变,而且还会有很多让你蒙圈的异常。总的来说还是挺不错的一个练手项目,也算是对自己的一个考验吧,希望大家喜欢。
4、如果需要本文源码的话,请在公众号后台回复“智能淘宝”关键字进行获取,觉得不错,记得给个star噢。

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

SOPI垂直搜索引擎2.0是一个从信息采集到分析到索引的整套解决方案,让你也可以轻松拥有一个多功能垂直搜索引擎。可以针用于行业垂直信息进行搜索,网站搜索等各类应用。 SOPI垂直搜索引擎系统的应用特点 外网搜索引擎:众多内容型网站为了保持数据的最新,不得不花费大量的人力进行内容更新。 SOPI 系统可以锁定需要的网站,进行定时采集此网站的最新内容;可以节省大量的人力成本,而且可以保证信息的全面性,同时结合搜索技术在海量的信息库中快速找到需要的信息。 高应用扩展性,可以根据用户需求快速配置成为不同类型的垂直搜索引擎,如成为商机搜索、产品信息及其他各类需要的信息。只需普通技术人员便可以实现。 极少量的人工干预,系统管理员仅通过管理界面即可自动实现各类信息的搜索。大部分工作由系统自动完成。 自动生成对网站的配置,提高工作效率及降低工作难度,垂直搜索引擎对不同网站进行不同配置是必然的,本系统应用自动化技术将人工工作降到最低,将工作人员的技术要求降至最低。 可以从多个界而采集信息,系统进行自动合并,如从一个页面搜索产品信息,另一个网页搜索公司信息,将两个页面的内容自动合并。 站内搜索引擎:可以轻松将内部网站的内容进行索引,为企业提供企业知识管理,或为网站用户提供自身网站的搜索服务。 SOPI 搜索系统采用先进的索引机制,高效对全文进行索引及搜索,可以产生与百度和 GOOGLE 相同的准确结果,而且快速; SOPI搜索引擎系统的技术特点 使用与GOOGLE相同的数据库系统Oralce Berkeley DB嵌入式数据库,千万级数据状况下操作数据仍保持在毫秒级,与使用ORACLE或SqlServer数据库性能提升数百倍。 系统结构的合理分离有利于分布式架构,适应未来大量的搜索工作,可以轻易在多服务器环境中进行应用。 各子系统相互独立,任一子系统的停止运行不影响其他系统,有效保证稳定性; 先进的文章及图片指纹技术,超低重复率。由于不同网站有大量重复信息,如果不能有效辨别文章是否存在将会有大量重复信息存在,图片一样会有大量重复存在。 SOPI 系统采用先进的文章和图片识别系统有效保障超低重复率; 对文章和图片的超强提取能力,系统可以在各种复杂的网页中提取标题正文和时间等参数,可以高智能的提取有用的信息,过虑无用信息; 高性能的分词组件,字典词库高质量,保证索引和搜索的准确性; 优秀的管理平台,可以方便管理进行信息采集的站点列表,及对下载的层级进行自定义; 可便捷对系统进行扩展,以满足不同的需求 SOPI垂直搜索引擎子系统 SpiderService 作用:通过此服务将需要搜索的网站中的信息下载到本地 存储关系:通过从存储系统中读取下载列表,将下载的信息保存至硬盘 运行方式:以WINDOW服务方式自动运行 人工干预度:不需干预 AnalyseService 作用:此服务将下载到本的信息进行分析,为SpiderService提供新的URL列表,同时根据配置对网页中的内容进行提取,如供求信息\\文章\\产品信息等 存储关系:将分析结果及新URL保存到数据库 运行方式:以WINDOW服务方式自动运行 人工干预度:不需干预 AutoMatchService 作用:此服务用来自动匹配字段信息,如根据网站中分析的地区信息\\行业分析信息等各类分类信息匹配成为系统需要的信息,如从网站获得的地区信息:浙江省>>杭州市>>将这一内容自动匹配为浙江省或杭州市,也可以根据企业名自动匹配地区信息,如:杭州市欧派信息技术有限公司匹配为杭州市 存储关系:根据数据库中的存储结果自动匹配为需要形式的结果 运行方式:以WINDOW服务方式自动运行 人工干预度:不需干预 IndexService 作用:此服务用来将完善的信息索引到索引库,提供外部进行搜索,通过索引库的建立可以向用户提供如类似BAIDU一样的搜索 存储关系: 运行方式:以WINDOW服务方式自动运行 人工干预度:不需干预 TokenizerService 作用:此服务用来向WEB提供分词服务,向用户BAIDU式搜索提供支持 存储关系:从数据库读取信息,转换成索引库中的内容 运行方式:以WINDOW服务方式自动运行 人工干预度:不需干预 管理WEB 作用:通过管理WEB可以实现需要的搜索及自定义的结果 存储关系:操作数据库及配置库 运行方式:WEB形式运行 人工干预度:人工干预 用户WEB 作用:向用户提供信息服务 存储关系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值