赞
踩
淘宝网是亚太地区较大的网络零售、商圈,由阿里巴巴集团在2003年5月创立。淘宝网是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品。
1、爬取淘宝页面某类商品的价格、名称、店家地址、交易数量;
2、以列表的形式将每一个商品的数据存入.csv文件中;
3、实现与用户的交互功能,不用修改程序也可以进行爬虫;
4、打包程序,以方便更换设备时也可以使用。
警告:淘宝网的robots协议设定不允许爬虫,本文仅供爬虫学习,切勿对淘宝网进行大规模爬虫,否则后果自负
淘宝网“每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品”,如此巨大的数据量,如何在淘宝网上爬取下来呢?
其实,淘宝网的搜索功能就是一个“爬虫”,通过键入“关键词”,实现对服务器的访问,返回你需要的商品序列。一般情况下,返回100页,每页48或60个商品。如下图:
1、我们需要做的是对每一页进行遍历,爬取每个商品的价格、名称、店家地址、交易数量等数据。
2、这时候我们需要看看“源码”(任意位置右键→查看网页源代码),淘宝网返回静态网页,采用html编写,源码如下图:
3、查看“上图源码”,我们发现:
价格数据为"view_price":“8.50”;
名称数据为"raw_title":“爱好圆珠笔按压式子弹头油笔批发办公学生用”
店家地址数据为"item_loc":“浙江 温州”
交易数量数据为"view_sales":“1.0万+人付款”
4、之后我们需要用python的re(正则表达式)库对上述数据进行提取(关于正则表达式的编写,大家可以看一下:正则表达式-菜鸟教程)
5、提取完成之后,就是存储的问题了,我们需要把提取出来的数据用特定格式存储在我们的计算机中,本文采用的存储格式是csv。
以上就是整个“淘宝网爬虫”思路。
#--author--张俊杰@Nick #coding:utf-8 import requests import re import time import csv def getHTMLText(url): try: #每次登陆淘宝,淘宝都会以加密方式返回登陆账号和密码信息,如果使用程序访问的话,需要发送post请求,这时需要发送cookie,以实现自动登录。请使用自己的cookie,复制到header字典中。 header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36", "cookie":“输入你的cookie”} r = requests.get(url,headers=header,timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def parsePage(ilt,html): try: #请百度搜索正则表达式的菜鸟教程,勤加练习,必有大成。 plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) tlt = re.findall(r'\"raw_title\"\:\".*?\"',html) loc = re.findall(r'\"item_loc\"\:\".*?\"',html) sale = re.findall(r'\"view_sales\"\:\"[\d\.]*.*?\"',html) for i in range(len(plt)): price = eval(plt[i].split(':')[1]) title = eval(tlt[i].split(':')[1]) location = eval(loc[i].split(':')[1]) sales = eval(sale[i].split(':')[1]) ilt.append([price,title,location,sales]) except: print("") def printGoodsList(ilt): tplt = "{:4}\t{:6}\t{:8}\t{:8}\t{:8}" print(tplt.format("序号","价格","商品名称","商品地址","付款数量")) output_list=["序号","价格","商品名称","商品地址","付款数量"] #存储路径需根据需要更改 with open('C:/Users/你杰哥/Desktop/python/淘宝/'+str(goods)+'('+str(depth*48)+'条数据)'+'.csv',"a+",encoding='GB18030',newline='') as csvfile: w=csv.writer(csvfile) w.writerow(output_list) csvfile.close() count=0 for g in ilt: count = count+1 print(tplt.format(count,g[0],g[1],g[2],g[3])) out_putlist=[count,g[0],g[1],g[2],g[3]] #存储路径需根据需要更改 with open('C:/Users/你杰哥/Desktop/python/淘宝/'+str(goods)+'('+str(depth*48)+'条数据)'+'.csv',"a+",encoding='GB18030',newline='') as csvfile: w=csv.writer(csvfile) w.writerow(out_putlist) csvfile.close() def main(goods,depth): start_url='https://s.taobao.com/search?q='+goods infoList =[] for i in range(depth): try: url = start_url + '&s='+ str(44*i) # 下面是我的网址简化过程,最好学习一下。 #1、https://s.taobao.com/search?q=圆珠笔&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190826&ie=utf8&p4ppushleft=1%2C48&s=0 #2、https://s.taobao.com/search?q=圆珠笔&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190826&ie=utf8&p4ppushleft=1%2C48 #3、https://s.taobao.com/search?q=圆珠笔 #4、这个网址就可以实现我们需要的数据返回。 html= getHTMLText(url) parsePage(infoList,html) except: continue #print(html) printGoodsList(infoList) #实现超级简单的用户交互,想爬取什么就爬取什么 goods=input("请输入你需要搜索的商品:") #本文仅供学习,爬虫深度的设置,请理性设置 depth=int(input("请输入需要爬取的页数(请尝试在淘宝中搜索该商品关键词,查看返回页码,请理性设置爬虫深度):")) #传参,需把外部参数传入main函数中。 main(goods,depth) #提醒 print("数据爬取结束") time.sleep(10)
在TB.py同目录下右键打开cmd,执行pyinstaller -F TB.py #TB.py为编写的python文件(如果不会封装,请看我上一篇文章)
1、双击TB.exe;
2、输入关键词(比如圆珠笔)、爬虫页数(depth)(比如2);
3、爬虫结束
4、爬虫结果
1、Python程序简洁,各种第三方库支持,爬虫方便;
2、在初次爬取淘宝网时出现了“无法访问”的问题,这是因为程序访问受限,需发送post请求,创建字典,发送User-Agent和cookie;
3、静态网页爬虫需对网页源代码进行分析,确定数据位置和特征;
4、正则表达式是一种非常简便的数据匹配方式,请认真学习用法,勤加练习;
5、程序编写、运行会遇到很多的问题,耐心解决;
6、淘宝网是不允许爬虫的,所以此帖仅供学习爬虫技术,不建议大家对淘宝网网页进行大规模爬取。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。