您的位置:首页 > 编程语言 > Python开发

Python 爬取淘宝商品的价格并保存到本地excel文件中

2018-11-20 19:09 579 查看

刚学Python爬虫没多久,老想着爬点什么。哈哈,刚好前段时间双11,就把淘宝爬了下。

不知道为什么,上次对淘宝进行页面读取不需要cookie就可以获取一些信息。现在需要cookie才能过去。话不多说,看代码:
 

[code]# coding=UTF-8
import requests
import re    # 正则表达式
import xlwt  # excel 操作
import time  # 获取时间
import threading

# 需要cookies才能进
def getText(url):
try:
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68."
"0.3440.75 Safari/537.36",
'cookie': "这里复制你自己的cookie"
}
t = requests.get(url, headers=header)  # 不知道为什么,现在需要cookes才可以爬去到
t.raise_for_status()  # 页面看是否有问题
return t.text
except:
print('页面解析出错!')
return None

# 在html里面得到信息,保存在li列表里面
def getMessage(li, html):
if(html == None):
return ''
title = re.findall(r"\"raw_title\"\:\".*?\"", html)
price = re.findall(r"\"view_price\"\:\".*?\"", html)
loc = re.findall(r"\"item_loc\"\:\".*?\"", html)
sales = re.findall(r"\"view_sales\"\:\".*?\"", html)
count = title.__len__()
for i in range(count):
title_num = str(title[i]).split(':')[1].replace('\"', '')
price_num = str(price[i]).split(':')[1].replace('\"', '')
loc_num = str(loc[i]).split(':')[1].replace('\"', '')
sales_num = str(sales[i]).split(':')[1].replace('\"', '')
li.append([title_num, price_num, loc_num, sales_num])

def saveXls(name, li):  # 将列表保存为exce文件--xls
t = time.strftime('%Y-%m-%d-%H-%M', time.localtime())  # 获取现在的时间,用与文件保存
book = xlwt.Workbook(encoding='UTF-8', style_compression=0)  # 创建一个xls对象
name_t = str(name+"-"+t)
sheet = book.add_sheet(name)
# 前面是sheet 命名 参数overwrite就是说可不可以重复写入值,就是当单元格已经非空,你还要写入
# 加了overwrite 会报错???
sheet.write(0, 0, "商品名字")
sheet.write(0, 1, "商品价格")
sheet.write(0, 2, "发货地")
sheet.write(0, 3, "付款人数")
count = 1
average = 0
print("一共"+str(li.__len__())+"个商品")
for item in li:
sheet.write(count, 0, item[0])
try:
average = average + float(item[1])
except:
print('')
sheet.write(count, 1, item[1])
sheet.write(count, 2, item[2])
sheet.write(count, 3, item[3])
count = count + 1
filename = "C:\\Users\那个谁\Desktop\爬虫测试\淘宝\\"+name_t+".xls"
average = average/int(li.__len__())
print("平均价格:"+str(average))
try:
book.save(filename)
except:
try:
filename = filename + str(1.0)
book.save(filename)
except:
print("保存表格错误!!!")
print("★保存成功!自行打开文件哈,我懒的输出了!★")

# 根据输入的信息在淘宝上爬去商品,保存在exc里面根据名字-日期保存!
def taoBao(message, page):
li = []
i = page[0]
count = page[1]
while i <= count:
num = 3-i*3
try:
url = "https://s.taobao.com/search?q="+str(message)+"s="+str(num*44)
html = getText(url)
getMessage(li, html)
except:
i = i+1
continue
i = i+1
# print('名字\t\t价格\t\t出售地\t\t付款人数')
# for i in li:
#     print(i[0]+'\t'+i[1]+'\t'+i[2]+'\t'+i[3])
saveXls(message, li)

if __name__ == '__main__':
message = input("输入你想要搜索的商品:")
start2 = time.time()
page = [0, 20]
taoBao(message, page)
end2 = time.time()
print("花费的时间:"+str(end2 - start2))

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: