爬取淘宝商品排名比价

要点:要登录自己的淘宝账号,获取含有登录信息的“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-1253.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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值