热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

教你如何用Python爬虫搜索淘宝商品,生成操作日志的系统![Python常见问题]

 1前言随着网购的兴起,使得很多传统店铺转型做线上生意,电子商务的产生极大便利了我们的生活。2项目目标通过Python程序一键搜索并直达目的地,爬取淘宝商品链接,商品名称

教你如何用Python爬虫搜索淘宝商品,生成操作日志的系统![Python常见问题]

 

/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,Arial", 12))  # 显示成明文形式


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


self.e1 = tk.Entry(self.root,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","              。。。。请 输 入 网 址 。。。。
")


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


self.te.insert("insert","              。。。。地址不正确 。。。。
")


else:


self.te.insert("insert","解析目标网页:%s

"%self.e2.get())


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


self.te.insert("insert","

")


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


                  result=x+"
"+y+"
"+z+"

"


self.te.insert("insert",result,"

") #插入到文本框


self.te.insert("insert","

") #插入空格


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

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

# 保存结果到excel


def sc(self):


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


       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","            。。。。生 成 完 毕。。。。。
")

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

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

# 保存日志
def log(self):


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


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


for y in range(len(ss)):


                  rea=str(self.ti)+ss[y]+"
"


                  f.write(rea)

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

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

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

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

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

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

所以代码如下:

# 搜索商品
def search(self):


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


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

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

# 关闭程序
def close(self):


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


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

/9 小结/

1、不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

2、本文基于Python网络爬虫,利用爬虫库,打造了一款简易的智能淘宝搜索系统,并且可以操作生成日志。

3、这个系统看似很简单,实则对于新手小白是个不小的挑战,甚至有些大佬也很容易掉坑,主要这个网页分析有点复杂多变,而且还会有很多让你蒙圈的异常。总的来说还是挺不错的一个练手项目,也算是对自己的一个考验吧,希望大家喜欢。

4 、 如果需要本文源码的点击这里获取

 

此文转载文,著作权归作者所有,如有侵权联系小编删除!

 


推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
author-avatar
晦涩的爱情嵌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有