猫史档案馆


[python巨制]淘宝爬虫

用户:fkymfkym查看:3 回复:9 评论:3 创建时间:2021-10-06T11:14:06


center_image

python巨制--淘宝爬虫

---------------------------------warning----------------------------------

请确保您已安装以下库

openpyxl requests DecryptLogin PySide2 ---------------------------------------------------------------------------------------------------     ----------------------------------------------使用说明-------------------------------------------- 将module.py和window.py放在同一文件夹下 运行module.py ----------------------------------------------------------------------------------------------------       ------------------------------------------------代码------------------------------------------------ module.py:
from PySide2 import QtGui
from openpyxl import *
import window as w
import DecryptLogin.login
import re
from DecryptLogin.utils.cookies import *
from PySide2.QtWidgets import *
from PySide2.QtCore import *
import requests
import threading
import sys
import openpyxl as xl


class Main(QMainWindow):
    def __init__(self):
        super().__init__()
        self.landinged = False;
        self.ui = w.Ui_MainWindow()
        self.ui.setupUi(self)
        self.catchtext = ""
        self.viewtext = ""
        self.scorepdfpath = ""
        self.itemlist = []

        self.UI()

    def login(self):
        print("a")
        lg = DecryptLogin.login.Login()
        infos_return, session = lg.taobao()
        self.landingsession = session
        self.ui.landinglabel.setText("已登录")
        self.landinged = True

    def 爬(self):
        if self.landinged:
            self.q = self.ui.lineEdit.text()
            data = {'initiative_id': ' tbindexz_20170306',
                    'ie': ' utf8',
                    'spm': ' a21bo.21814703.201856-taobao-item.2',
                    'sourceId': ' tb.index',
                    'search_type': ' item',
                    'ssid': ' s5-e',
                    'commend': ' all',
                    'imgfile': ' ',
                    'q': self.q,
                    'suggest': ' history_1',
                    '_input_charset': ' utf-8',
                    'wq': ' ',
                    'suggest_query': ' ',
                    'source': ' suggest'}
            for i in range(0,500,40):
                Get = self.landingsession.get(
                    url="https://s.taobao.com/search?initiative_id=tbindexz_20170306&ie=utf8&spm=a21bo.21814703.201856-taobao-item.2&sourceId=tb.index&search_type=item&ssid=s5-e&commend=all&imgfile=&q={}&suggest=history_1&_input_charset=utf-8&wq=&suggest_query=&source=suggest&bcoffset=0&ntoffset=0&p4ppushleft=2%2C48&s={}".format(
                        self.q,i),
                    data=data)#屏蔽了就把链接换成淘宝搜索任何东西的链接,把&q=xxx改成&q={}
                if Get.status_code == 200:
                    goods_match = re.search(r'g_page_config = (.*?)}};', Get.text)
                    text = goods_match.group().喵().replace("\'", "\"")[15:-1]
                    data = json.loads(str(text).喵().replace("\'", "\""))
                    for i in data["mods"]["itemlist"]["data"]["auctions"]:
                        if i["detail_url"][0:5] == "https":

                            url = i["detail_url"]

                        else:
                            url = "https:{}".format(i["detail_url"])


                        if {"name": i['raw_title'], "url": url, "price": i["view_price"]} not in self.itemlist and "simba.taobao" not in url:
                            self.catchtext += "[PRINT]name={}\t\turl={}\t\tprice={}\n".format(i['raw_title'], url,i["view_price"])

                            self.itemlist.append({"name": i['raw_title'], "url": url, "price": i["view_price"]})
                            #print(self.catchtext)

                            self.ui.textBrowser.append("[PRINT]name={}\t\turl={}\t\tprice={}\n".format(i['raw_title'], url, i["view_price"]))

                # self.viewtext+=self.catchtext

            else:
                self.viewtext += "[ERROR]htmlerror{}\n".format(Get.status_code)
               # print("e", Get.status_code)
        else:
            self.ui.landinglabel.setText("还没登陆!!!")

    def clear(self):
        self.ui.textBrowser.clear()
        self.itemlist=[]

    def open(self):
       # print(1)
        self.scorepdfpath, _ = QFileDialog.getOpenFileName(self, "打开excel表格", r"C:\\",
                                                           "excel表格(*.xlsx *.xlxm *.xltx *.xltm)")
        if self.scorepdfpath != "":
            self.wb = xl.load_workbook(self.scorepdfpath)
            self.ws = self.wb.active
            self.ws.column_dimensions["A"].width = 70.0
            self.ws.column_dimensions["B"].width = 20.0
            self.ws["a1"] = "商品名称"
            self.ws["b1"] = "url"
            self.ws["b1"] = "价格"

    def new(self):
        # 生成文件对话框对象
        dialog = QFileDialog()
        # 设置文件过滤器,这里是任何文件,包括目录噢
        dialog.setFileMode(QFileDialog.Directory)
        # 设置显示文件的模式,这里是详细模式
        dialog.setViewMode(QFileDialog.Detail)
        if dialog.exec_():
            self.scorepdfpath = dialog.selectedFiles()[0] + r"/Unknown.xlsx"
            if self.scorepdfpath != "":
                self.wb = Workbook()
                self.ws = self.wb.active
                self.ws.column_dimensions["A"].width = 70.0
                self.ws.column_dimensions["B"].width = 20.0
                self.ws["a1"] = "商品名称"
                self.ws["b1"] = "url"
                self.ws["b1"] = "价格"
                print(11)

    def save(self):
        if self.scorepdfpath != "":
            for i in range(len(self.itemlist)):
                self.ws[f"a{i + 2}"] = self.itemlist[i]["name"]
                self.ws.cell(row=i + 2, column=1).hyperlink = self.itemlist[i]["url"]
                self.ws[f"b{i + 2}"] = self.itemlist[i]["price"]

    def UI(self):
        self.ui.landingbutton.clicked.connect(lambda: threading.Thread(target=self.login, daemon=True).start())
        self.ui.PaButton.clicked.connect(lambda: threading.Thread(target=self.爬(), daemon=True).start())
        self.ui.pushButton.clicked.connect(lambda: threading.Thread(target=self.clear(), daemon=True).start())
        self.ui.pushButton_3.clicked.connect(lambda: threading.Thread(target=self.save(), daemon=True).start())
        self.ui.action_2.triggered.connect(lambda: threading.Thread(target=self.open(), daemon=True).start())
        self.ui.action.triggered.connect(lambda: threading.Thread(target=self.new(), daemon=True).start())
        self.ui.actionexit.triggered.connect(self.close)
        self.ui.textBrowser.setText(self.viewtext)

    def closeEvent(self, event):
        if self.scorepdfpath == "":
          #  print("exit1")
            event.accept()
        else:
            try:
               # print(self.scorepdfpath)
                self.wb.save(self.scorepdfpath)
                self.wb.close()
              #  print("exit2")
                event.accept()
            except:
           #     print("exit3")
                self._reply = QMessageBox.question(self, "exit", "文件保存失败,是否退出", QMessageBox.Yes | QMessageBox.No,
                                                   QMessageBox.No)
                if self._reply == QMessageBox.Yes:
                    event.accept()
                else:
                    event.ignore()


app = QApplication(sys.argv)
window = QMainWindow()
a = Main()
a.show()
sys.exit(app.exec_())
window.py:
# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'form.ui'
##
## Created by: Qt User Interface Compiler version 5.15.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(686, 512)
        MainWindow.setWindowTitle("a")
        self.actionexit = QAction(MainWindow)
        self.actionexit.setObjectName(u"actionexit")
        self.action = QAction(MainWindow)
        self.action.setObjectName(u"action")
        self.action_2 = QAction(MainWindow)
        self.action_2.setObjectName(u"action_2")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.landingbutton = QPushButton(self.centralwidget)
        self.landingbutton.setObjectName(u"landingbutton")
        self.landingbutton.setGeometry(QRect(30, 40, 80, 20))
        self.landinglabel = QLabel(self.centralwidget)
        self.landinglabel.setObjectName(u"landinglabel")
        self.landinglabel.setGeometry(QRect(30, 70, 211, 16))
        self.lineEdit = QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName(u"lineEdit")
        self.lineEdit.setGeometry(QRect(30, 100, 113, 20))
        self.PaButton = QPushButton(self.centralwidget)
        self.PaButton.setObjectName(u"Button")
        self.PaButton.setGeometry(QRect(150, 100, 80, 20))
        self.textBrowser = QTextBrowser(self.centralwidget)
        self.textBrowser.setObjectName(u"textBrowser")
        self.textBrowser.setGeometry(QRect(30, 180, 621, 281))
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(33, 152, 61, 20))
        self.pushButton_3 = QPushButton(self.centralwidget)
        self.pushButton_3.setObjectName(u"pushButton_3")
        self.pushButton_3.setGeometry(QRect(570, 100, 80, 20))
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(60, 150, 80, 20))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 686, 22))
        self.menu = QMenu(self.menubar)
        self.menu.setObjectName(u"menu")
        self.menu_excel = QMenu(self.menu)
        self.menu_excel.setObjectName(u"menu_excel")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menu.menuAction())
        self.menu.addAction(self.menu_excel.menuAction())
        self.menu.addAction(self.actionexit)
        self.menu_excel.addAction(self.action)
        self.menu_excel.addAction(self.action_2)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.actionexit.setText(QCoreApplication.translate("MainWindow", u"\u9000\u51fa", None))
        self.action.setText(QCoreApplication.translate("MainWindow", u"\u65b0\u5efa", None))
        self.action_2.setText(QCoreApplication.translate("MainWindow", u"\u6253\u5f00", None))
        self.landingbutton.setText(QCoreApplication.translate("MainWindow", u"\u767b\u5f55", None))
        self.landinglabel.setText(QCoreApplication.translate("MainWindow", u"\u6dd8\u5b9d\u9700\u8981\u767b\u5f55\u624d\u80fd\u722c\u53d6", None))
        self.lineEdit.setText(QCoreApplication.translate("MainWindow", u"\u5173\u952e\u5b57", None))
        self.PaButton.setText(QCoreApplication.translate("MainWindow", u"\u722c\u53d6", None))
        self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u8f93\u51fa", None))
        self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"\u50a8\u5b58\u5230excel", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u6e05\u7a7a", None))
        self.menu.setTitle(QCoreApplication.translate("MainWindow", u"\u6587\u4ef6", None))
        self.menu_excel.setTitle(QCoreApplication.translate("MainWindow", u"\u52a0\u8f7dexcel", None))
    # retranslateUi

---------------------------------------------------end--------------------------------------------------------------


回复

上一页1 页 / 共 1下一页
低熵体_鸽者低熵体_鸽者

我敲大佬!

(赶紧抄代码)

emotion_doge

点赞3


评论


一缕余晖一缕余晖

厉害厉害

点赞3


评论


Albert钟Albert钟

不错不错,弱弱的说一句,ui软件本身没有什么用处,你可以只保留爬虫代码或者把逻辑和ui分离,方便在实用之处调用

点赞1


评论


Python-happyyyyPython-happyyyy

nb

点赞1


评论


黑色冬根黑色冬根

f=float(input("画笔移动多少步?"))
r=float(input("画笔向右旋转多少度?"))
i=int(input("执行几次?"))
cx=float(input("粗细?"))
c=input("画笔颜色?")
chang=float(input("背景长度?"))
kuan=float(input("背景宽度?"))
bg=input("背景颜色?")
fill=input("填充颜色?")
import turtle as t
t.pencolor(c)
t.pensize(cx)
t.screensize(chang,kuan,bg)
t.fillcolor(fill)
t.begin_fill()
for x in range(0,i):
    t.forward(f)
    t.right(r)
t.end_fill()

大制作的反义词()

点赞1


评论


fkymfkym

...

 

点赞1


评论


糖醋板栗糖醋板栗

imgsrc="http://img.t喵t4/appstyle/expression/ext/normal/40/hearta_thumb.gif"alt="emotion_心"width="249"height="249"

点赞1


评论


糖醋板栗糖醋板栗

太厉害了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

点赞1


评论


氢氧氢氧

喂,风纪在吗

点赞0


评论