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}\t{:8}\t{: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()