使用python爬虫,对天猫商品详细信息进行获取

下面是在代码中所使用的模块

requests模块进行网址的请求
lxml中的etree进行数据的获取
urllib中的request.urlretrieve进行商品图片的下载,prase进行编码
tkinter进行用户交互
time模块进行时间的延迟
pygame 用来显示图片
webbrowser用于弹出指定网页
PIL模块可以将.png .gif 转换成tkinter专用的.jpg(此程序中形如废柴,没有用到)

最终结果如下

python模拟天猫商城

使用tkinter的交互界面,我们可以看到,可以查看下一个商品,商品价格,月销量,评价数,同时也可以弹出该商品的该买链接
商品图片如下

首先,我们需要天猫商城的首页url

首页网址:https://www.tmall.com/

当我们输入需要搜索的内容,网址会发生变化:
https://list.tmall.com/search_product.htm?q=%C0%F1%CE%EF&type=p&vmarket=&spm=875.7931836%2FB.a2227oh.d100&from=mallfp…pc_1_searchbutton
C0%F1%CE%EF这串字符是将礼物进行编码得到的,因此,我们需要将汉字进行编码,写入url中
编码代码如下:

def get_url():name = number1.get()data = {}data['name'] = nameresp = parse.urlencode(data)name_urlcode = resp[5:]url = 'https://list.tmall.com/search_product.htm?q=' + str(name_urlcode) + '&type=p&vmarket=&spm=875.7931836%2FB.a2227oh.d100&from=mallfp..pc_1_searchbutton'

接下来就是爬虫了,我们需要将转换的url进行解析,解析代码如下:

def get_HTML(url):# print("正在请求:",url)response = requests.get(url)text = response.content.decode('gbk')html = etree.HTML(text)return html

可以返回网页中的html

下一步,就是获取该网页的数据,并每个数据保存在一个字典中,保存在数组中。

代码如下:

#获取页面内的详细信息,包括商品名称,商品价格,商品链接,商品月销量,商品评价数的详细信息
def get_detials(url):html = get_HTML(url)#使用xpath提取数据#获取URLevery_urls = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/p[2]/a/@href')#获取商品名称commodity_name = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/p[2]/a/@title')#获取商品价格commodity_price = html.xpath('//div[@id = "J_ItemList"]/div/div/p[1]/em/@title')#商品月销量commodity_number = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/p[3]/span/em/text()')#商品评价数commodity_Evaluation = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/p[3]/span[2]/a/text()')commodity_shop_name = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/div[3]/a//text()')#商品图片commodity_picture_url_src = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/div[1]//img/@src')commodity_picture_url_data = html.xpath('//div[@id = "J_ItemList"]/div/div[1]/div[1]//img/@data-ks-lazyload')#将商品图片的url存入一个数组中commodity_picture_url = []for number in commodity_picture_url_src:commodity_picture_url.append(number)for number in commodity_picture_url_data:commodity_picture_url.append(number)#储存所有数据的数组file_new_commodity = []#获取每一个数据for each in range(len(every_urls)):try:new_commodity = {}every_url = 'https:' + every_urls[each]new_commodity["商品名称"] = commodity_name[each].strip()new_commodity["商品链接网址"] = every_url# new_commodity["商品店名"] = str(commodity_shop_name[4*each+2]).strip()new_commodity["商品价格"] = str(commodity_price[each])+'元'new_commodity["商品月销量"] = str(commodity_number[each])new_commodity["商品评价数"] = str(commodity_Evaluation[each])picturl_url = 'http:' + commodity_picture_url[each]new_commodity["商品图片网址"] = picturl_urlfile_new_commodity.append(new_commodity)except:passreturn file_new_commodity

将所有数据返回

下一步,就是,将数据显示在tkinter中,我们可以很清晰的了解每个商品的详细信息,包括价格,商品链接,以及月销量

代码如下;

#创建tkinter显示
def get_Tkinter():master = tkinter.Tk()master.title('天猫')frame = tkinter.Frame(master)frame.pack(padx = 10,pady = 20)#初始化数据number1 = tkinter.StringVar()number2 = tkinter.StringVar()number3 = tkinter.StringVar()number4 = tkinter.StringVar()number5 = tkinter.StringVar()number6 = tkinter.StringVar()number7 = tkinter.StringVar()#显示表头tkinter.Label(frame,text = "你需要搜索的商品:").grid(row = 0,column = 0,sticky=tkinter.E)tkinter.Label(frame,text="商品名称:").grid(row=2, column=0,sticky=tkinter.E)tkinter.Label(frame, text="商品链接网址:").grid(row=3, column=0,sticky=tkinter.E)tkinter.Label(frame, text="商品店名:").grid(row=4, column=0,sticky=tkinter.E)tkinter.Label(frame, text="商品价格:").grid(row=5, column=0,sticky=tkinter.E)tkinter.Label(frame, text="商品月销量:").grid(row=6, column=0,sticky=tkinter.E)tkinter.Label(frame, text="商品评价数:").grid(row=7, column=0,sticky=tkinter.E)#在上面输入需要搜索的内容tkinter.Entry(frame, textvariable = number1,width = 50).grid(row=0, column=1)#清空def zero():number2.set('')number3.set('')number4.set('')number5.set('')number6.set('')number7.set('')url_text =[]url_picturre= []#当按下下一个按钮时,进行数据的刷新def show_next(numb = [0]):if numb[0] < len(news):num = numb[0]numb[0] = numb[0]+1every = news[num]#将数据显示在tkinternumber2.set(every['商品名称'])number3.set(every['商品链接网址'])# number4.set(every['商品店名'])number5.set(every['商品价格'])number6.set(every['商品月销量'])number7.set(every['商品评价数'])url_text.append(every['商品链接网址'])url_picturre.append(every['商品图片网址'])request.urlretrieve(url_picturre[0], '0.png')url_picturre.pop()#调用显示图片的tinterpicture_display()#当商品中所有数据显示完之后,重新归零else :numb[0] = 0#弹出所在网页def show_url():time.sleep(0.5)webbrowser.open(url_text[-1])#显示按钮tkinter.Button(frame, text="搜索", width=10, command=get_url).grid(row=1, column=2, padx=10, pady=10)tkinter.Button(frame, text="清空", width=10, command=zero).grid(row=1, column=0, padx=10, pady=10)tkinter.Button(frame, text="刷新", width=10,command = show_next).grid(row=1, column=1, padx=10, pady=10)#显示商品信息框tkinter.Entry(frame, textvariable=number2, width=50, state="readonly").grid(row=2, column=1)tkinter.Entry(frame, textvariable=number3, width=50, state="readonly").grid(row=3, column=1)tkinter.Entry(frame, textvariable=number4, width=50, state="readonly").grid(row=4, column=1)tkinter.Entry(frame, textvariable=number5, width=50, state="readonly").grid(row=5, column=1)tkinter.Entry(frame, textvariable=number6, width=50, state="readonly").grid(row=6, column=1)tkinter.Entry(frame, textvariable=number7, width=50, state="readonly").grid(row=7, column=1)#显示商品信息之后的按钮框tkinter.Button(frame, text="退出", width=10,command = master.quit).grid(row=8, column=0, padx=10, pady=10)tkinter.Button(frame, text="弹出天猫页面", width=10,command = show_url).grid(row=8, column=1, padx=10, pady=10)tkinter.Button(frame, text="下一个", width=10,command = show_next).grid(row=8, column=2, padx=10, pady=10)tkinter.mainloop()picture()

下一步就是弹出图片的模块

代码如下:

#在pygame显示图片
def picture_display():# 初始化pygame.init()# 界面高度与宽度size = width, height = 800, 500# 移动速度bg = (255, 255, 255)# 创建指定大小的窗口screen = pygame.display.set_mode(size)# 设置窗口标题pygame.display.set_caption("商品图片")# 加载图片turtle = pygame.image.load("0.png")# 获取图像的位置矩形position = turtle.get_rect()# 填充背景screen.fill(bg)# 更新图像screen.blit(turtle, position)# 更新界面pygame.display.flip()# 延迟pygame.time.delay(10)

在tkinter中,并且有弹出天猫页面,我们可以详细的查看商品的具体信息

    def show_url():time.sleep(0.5)webbrowser.open(url_text[-1])

图片如下:
逛天猫商城无非就是这几个步骤,感谢收看,如有错误,望指正。

python模拟天猫商城相关推荐

  1. idea中ssm集成freemark_基于SSM框架的迷你天猫商城

    作者:TMall来源:https://gitee.com/project_team/Tmall_demo 迷你天猫商城 迷你天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城 ...

  2. 基于springboot的仿天猫商城

    基于springboot的仿天猫商城 简介 迷你天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认 ...

  3. 基于javaweb+springboot的仿天猫商城系统(java+jsp+Springboot+SSM+mysql+maven)

    基于javaweb+springboot的仿天猫商城系统(java+jsp+Springboot+SSM+mysql+maven) 一.项目介绍: 迷你天猫商城是一个基于SSM框架的综合性B2C电商平 ...

  4. 基于javaweb的仿天猫商城系统(java+jsp+springboot+ssm+mysql)

    基于javaweb的仿天猫商城系统(java+jsp+springboot+ssm+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/s ...

  5. 天猫商城自动化python脚本(仅供初学者学习使用)

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  6. 爬虫项目八:Python对天猫商品数据、评论数据爬取

    文章目录 前言 一.商品数据 1.分析url 2.登录账号 3.解析数据 4.模拟滑动滑块 二.评论数据 1.分析url 2.解析数据 前言 天猫商城商品数据.评论数据爬取 提示:以下是本篇文章正文内 ...

  7. python模拟购物车购物过程_Python 模拟购物车的实例讲解

    1.功能简介 此程序模拟用户登陆商城后购买商品操作.可实现用户登陆.商品购买.历史消费记查询.余额和消费信息更新等功能.首次登陆输入初始账户资金,后续登陆则从文件获取上次消费后的余额,每次购买商品后会 ...

  8. python鲜花水果商城毕业设计开题报告

    本文给出的python毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求修改) 选题目的和意义 目的:伴随着互联网技术的不断发展和完善,在人们的生活和工作的各个方面,互联网都有着非常重大 ...

  9. python模拟网页点击_python模拟点击

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python怎么模拟点击网页按钮前提环境:python3 和 visual st ...

最新文章

  1. java之php、Android、JAVA、C# 3DES加密解密
  2. cisco路由器ios升级(rommon下)
  3. ArrayList add(int index,E element)
  4. Java遍历指定文件夹,在屏幕打印所有以abc结尾的文件
  5. QT的QHostInfo类的使用
  6. c++ string类 知识点整理
  7. Java架构师面试题系列之Dubbo面试专题(29题,含详细答案解析)
  8. Matlab基础教程—【10】Matlab符号运算
  9. 网络逻辑漏洞、SQLMAP、Nmap及其它命令的使用方法
  10. 来势汹汹,奥米克戎;是否补种,特定疫苗? | 经济学人全球早报精选
  11. CMD执行SQL文件 SQL SERVER数据库
  12. 在Markdown文档中插入数学公式
  13. SQL server卸载软件(可修复注册表)
  14. Beta阶段敏捷冲刺前准备
  15. Just do it and never give up,then you will find that things become better
  16. mysql list dbs_php mysql_list_dbs()函数用法示例
  17. 使用bat脚本运行jar程序 cmd下解决乱码问题
  18. 初探数通网络开放可编程简介
  19. jpa、mybatis、hibernate、spring data jpa区别
  20. netstat输出中Established时Recv-Q的含义

热门文章

  1. 软件测试人员应该怎样做好需求分析
  2. 到哪里去学习人工智能?怎么学AI?
  3. c语言中ntdll.dll,在Win32环境中从ntdll.dll调用Nt函数,C
  4. word涂改涂掉图片_Word对图形照片处理的几个小技巧,很少人知道!
  5. 丰乳细臀——读《丰乳肥臀》
  6. RfDNet 在Ubuntu16下的配置与运行——(二)数据准备与训练
  7. 做了个“飞行棋”小游戏
  8. [轉]CDONTS.NewMail发邮件-详细篇
  9. Android UI开源软件(三)
  10. 【读书笔记 | 自动驾驶中的雷达信号处理(第7章 目标滤波与跟踪)】