import requests import re import time #获取html页面 def getHTMLText(url): try: r = requests.get(url,timeout = 30) r.raise_for_status() r.encoding = "utf-8" #可以节约时间 return r.text except: return "" #对获取的每一个页面进行解析,ilt是结果的列表类型 def parsePage(ilt,html): try: #"view_price":"149.00" plt = re.findall(r'"view_price":"[d.]*"',html) #"raw_title":"2017春季新款双肩包女韩版时尚pu背包流苏子母包百搭学院风书包" tlt = re.findall(r'"raw_title":".*?"',html) for i in range(len(plt)): #字符串分割获取商品的价格,eval()函数能够将字符串的最外层的双引号或单引号去掉 price = eval(plt[i].split(':')[1]) title = eval(tlt[i].split(":")[1]) ilt.append([price,title]) except: print("") #将解析后的信息输出 def printGoodsList(ilt): tplt = "{:4} {:8} {:16}" #打印输出信息的表头 print(tplt.format("序号","价格","商品名称")) count = 0 for i in ilt: count +=1 #序号,价格,名称 print(tplt.format(count,i[0],i[1])) #定义主函数,记录整个程序运行的过程 def main(): start_time = time.time() #搜索关键词goods goods = "书包" #设定向下一页爬取的深度,爬取页数depth depth = 2 #爬取的URL start_url = "https://s.taobao.com/search?q=" + goods #定义变量infoList 表示输出结果 infoList = [] #因为每一个页面URL不同,需要对每一个页面进行单独访问和处理 for i in range(depth): try:#使用try多获取页面进行异常判断,如果某页面解析出问题,可以跳过该页面,往下继续,不会造成出现解析错误,程序停止 #对每一个页面的URL链接进行设计,因为淘宝每个页面显示44个商品 url = start_url + '&s=' + str(44*i) html = getHTMLText(url) #获取页面内容 parsePage(infoList,html) #对获取的页面进行处理 except: #continue语句只是结束本次循环,而不会终止循环的执行。break语句则是终止整个循环过程 continue #将获取的页面信息输出 printGoodsList(infoList) end_time = time.time() print(end_time-start_time) print(round(end_time-start_time)) main()