要点:要登录自己的淘宝账号,获取含有登录信息的“Cookie”并将其加入到headers中,否则抓取的时候,总是抓取到淘宝的登录页面
import re
import requests
def getHTMLText(url):
try:
headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
"Cookie" :"自己的登录的Cookie……"
}
r=requests.get(url, headers=headers)
r.raise_for_status
return r.text
except:
print("url error")
def getPrice(pLists,html):
rTitle=re.compile(r'\"raw_title\"\:\".*?\"')
rPrice=re.compile(r'"view_price":"\d+.\d{2}')
mTitle=rTitle.findall(html)
mPrice=rPrice.findall(html)
for i in range(len(mTitle)):
price=mPrice[i].split('"')[-1]
title=mTitle[i].split('"')[-2]
pLists.append([price,title])
def printPrice(pLists):
plti="{0:^3}\t{1:{3}^35}\t{2:^7}"
print(plti.format("序号","名称","价格",chr(12288)))
num=0
for pList in pLists:
num+=1
print(plti.format(num,pList[1],pList[0],chr(12288)))
goods="书包"
depth=2
start_url="https://s.taobao.com/search?q="+goods
pLists=[]
for i in range(depth):
try:
url=start_url+"&sort=sale-desc&bcoffset=0&p4ppushleft=%2C44&s="+str(44*i)
html=getHTMLText(url)
getPrice(pLists, html)
except:
continue
printPrice(pLists)
输出内容
序号 名称 价格
1 【辛巴推荐】卡拉羊小学生男女抑菌书包1-46年级一体式防水双肩包 229.00
2 【辛巴首推】卡拉羊146年级小学生书包一体式打开好清洗减负背包 209.00
3 双肩包男士大容量旅行电脑背包时尚潮流高中初中学生书包女大学生 59.00
4 【急速发货】小米双肩包小背包男女运动包日常休闲双肩包学生书包 24.90
5 2020新款牛津布双肩包女韩版防盗背包百搭单肩两用女包学生书包潮 29.90
6 电脑背包男士双肩包旅行大容量时尚潮流高中初中学生书包女大学生 59.00
7 大容量男士双肩包时尚潮流旅行电脑背包高中初中学生书包女小学生 45.00
8 商务背包男士双肩包韩版潮流旅行休闲女中学生书包简约时尚电脑包 59.80
9 男士旅行电脑背包女大学生时尚潮流双肩包高中初中学生大容量书包 32.00
10 动漫皮卡丘书包男女双肩包儿童时尚潮流小学生背包初中学生大容量 49.00
11 幼儿园书包男女孩儿童小书包1-3-6岁宝宝可爱卡通韩版潮双肩背包5 35.90
12 迪士尼书包小学生男女1-3-4-6年级米奇减负背包儿童书包8-10-12岁 53.00
13 男童书包小学生1-3-6年级女减负五儿童背包一二 三到六男孩四轻便 49.00
14 森马双肩包女大学生轻便简约书包韩版高中休闲旅行背包男时尚潮流 59.90
15 双肩包男士背包定制大学生大容量旅行电脑女时尚潮流初中学生书包 49.00
16 三级包1-3-4-6年级儿童轻便吃鸡背包男减负双肩包初中小学生书包 34.90
17 儿童书包小学生男女一二三到六年级韩版减负护脊贵族书包轻便防水 59.80
18 儿童书包男小学生男童1-3-6年级女 孩轻便护脊背包减负双肩三到六 65.90
19 书包女韩版高中原宿ulzzang中学生初中生百搭潮流ins男双肩包背包 45.00
20 皮卡丘书包男时尚潮流韩版初中学生高中小学生双肩包大容量背包女 49.00
下面代码转自嵩天老师
可以对比参考
#CrowTaobaoPrice.py
import requests
import re
def getHTMLText(url):
try:
r = requests.get(url, 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)
for i in range(len(plt)):
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 g in ilt:
count = count + 1
print(tplt.format(count, g[0], g[1]))
def main():
goods = '书包'
depth = 3
start_url = 'https://s.taobao.com/search?q=' + goods
infoList = []
for i in range(depth):
try:
url = start_url + '&s=' + str(44*i)
html = getHTMLText(url)
parsePage(infoList, html)
except:
continue
printGoodsList(infoList)
main()