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

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--------------------------------------------------------------
黑色冬根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
评论
糖醋板栗imgsrc="http://img.t喵t4/appstyle/expression/ext/normal/40/hearta_thumb.gif"alt="emotion_心"width="249"height="249"
点赞1
评论