淘宝比价

时间:2024-02-21 07:28:35
#抓取淘宝数据
import re
import requests
from bs4 import BeautifulSoup
import  string
import os
import sqlite3
class Getdata:
    def getHTMLText(url,header):
        try:
            r = requests.get(url,headers=header)
            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 GetCount(html):
        total=re.findall(\'"totalPage"\:\d+\',html)
        for i in range(len(total)):
            totalPage = eval(total[i].split(":")[1])
        return totalPage

    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]))

class DatabaseMannege:
    #创建数据表
    def CreateDataBase():
        try:
            db =sqlite3.connect("taobao.db")
        except:
            print("创建数据库失败")
        try:
            db.execute(\'create table GoodMsg(id varchar(10),price varchar(10),name varchar(40))\')
        except:
            print("创建表失败或表已经存在")
    ##将数据写入数据库
    def InsertDatabase(data):
        db =sqlite3.connect("taobao.db")
        cur = db.cursor()
        for property in data:
            try:
                print("开始插入")
                sql_insert = ("insert into GoodMsg(price,name)values(\'{}\',\'{}\')").format(property[0],property[1])

                cur.execute(sql_insert)
                db.commit()
                print("插入成功")
            except :
                print(\'插入失败\')
class Main:
    def main():
        print("请输入查询商品")
        goods = input()
        infoList = []
        start_url = "https://s.taobao.com/search?q=" + goods
        header = {"cookie":"thw=cn; cna=ktJ/FI8k0gQCAbaLv4XUGVvh; tg=0; enc=%2FDi9xgv2fnznKtXV88N9fUTdV6UcRLyw3G6h3pjdwcpbHwkSTh%2FO1B1zsb29cDTL5N8TU0t4TdkRNxzvKIn4Ig%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; tracknick=1052071694www; t=0a525deca2dff81647d91643519e7e37; UM_distinctid=16b9bd49a2a5ef-031997ebe67ce2-37c143e-144000-16b9bd49a2b92e; miid=1364685100501550517; _cc_=W5iHLLyFfA%3D%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; _m_h5_tk=98af7fdaf32be92fe72127eda6e0044e_1571041861081; _m_h5_tk_enc=ca1bdc50118e6ce4e5fd587ccc946e6c; mt=ci%3D-1_0; v=0; cookie2=1aac9317cb43d8f5dfab37bd0222fcf9; _tb_token_=578e3e4e7eedb; JSESSIONID=021AC0B7547DE41EE0944D2ECB89C106; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; l=dBjS2MZrqT2zAZFsBOCgSZ1_aY79jIRAguWbYNq9i_5BK6L_qNbOkg25WFp6cjWfthYB4NSLztv9-etkiKy06Pt-g3fPNxDc.; isg=BHR0oiuylQB4VAH5skFM2Q9IRTLsTpjNHWdJ-w7VA_-CeRTDNlnkx4w7_fEEgdCP",
                    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"}
        
        html = Getdata.getHTMLText(start_url,header)
        depth = Getdata.GetCount(html)
        DatabaseMannege.CreateDataBase()
        for i in range(depth):
            try:
                url = start_url + "&s=" + str(44 * i)
                html = Getdata.getHTMLText(url,header)
                Getdata.parsePage(infoList,html)
                Getdata.printGoodsList(infoList)
                DatabaseMannege.InsertDatabase(infoList)
            except:
                continue
Main.main()