├── B站番剧弹幕.txt ├── B站视频.txt ├── B站视频弹幕.txt ├── B站评论.txt ├── OG.py ├── OG.ui ├── OGbilibili.py ├── OGfanjudanmu.py ├── OGfanjudanmu.ui ├── OGjingdong.py ├── OGmainck.ui ├── OGmaoyanpiaofang.py ├── OGmaoyanpingfen.py ├── OGmeituan.py ├── OGmoban.py ├── OGshipindanmu.py ├── OGtaipingyang.py ├── OGweather.py ├── OGweibobangdan.py ├── OGweibohuati.py ├── OGzhongguo.py ├── README.md ├── bilibili.py ├── bilibili评论.py ├── calltest.py ├── city.txt ├── fanjudanmu.py ├── jingdong.py ├── maoyanpingfen.py ├── meituan.py ├── moban.py ├── shipindanmu.py ├── taipingyang.py ├── test.py ├── weibobangdan.py ├── weibohuati.py ├── zhongguo.py ├── zhongguotianqiwang.py ├── 中国天气网.txt ├── 京东.txt ├── 城市代码.txt ├── 太平洋汽车.txt ├── 央视新闻.py ├── 央视新闻.txt ├── 微博榜单.txt ├── 微博话题.txt ├── 无忧招聘网.txt ├── 无忧网.py ├── 猫眼票房.txt ├── 猫眼评分.txt ├── 网易.py ├── 网易新闻.py ├── 网易新闻.txt ├── 美团.txt └── 说明.txt /B站番剧弹幕.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:B站视频信息 2 | 网页主站:https://www.bilibili.com/ 3 | 爬取站点(示例):https://www.bilibili.com/bangumi/play/ep95840 4 | 提取数量:集数 * 3000 (弹幕上限为3000,根据具体筛选条件而定,可能实际小于3000) 5 | 爬取方式:关键字 6 | 关键字:ep号 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:暂无,如有其他需求请联系。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /B站视频.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:B站视频信息 2 | 网页主站:https://www.bilibili.com/ 3 | 爬取站点(示例):https://search.bilibili.com/all?keyword=点兔&from_source=nav_search_new 4 | 提取数量:关键字 * 页码 * 20 (页码上为50,根据具体筛选条件而定,可能实际小于50) 5 | 爬取方式:关键字 6 | 关键字:视频 7 | 支持批量关键字:是 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:爬取的信息,如av号可整理后用于其他功能。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /B站视频弹幕.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:B站视频弹幕 2 | 网页主站:https://www.bilibili.com/ 3 | 爬取站点(示例):https://www.bilibili.com/video/av1425825 4 | 提取数量:关键字 * 1000 (每个视频弹幕上限1000) 5 | 爬取方式:关键字 6 | 关键字:av号 7 | 支持批量关键字:是 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:暂无,如需其他功能请与我联系。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /B站评论.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:B站评论 2 | 网页主站:https://www.bilibili.com/ 3 | 爬取站点(示例):https://www.bilibili.com/bangumi/play/ss2762/?from=search&seid=6747644826565103934 4 | 提取数量:页码 * 20 5 | 爬取方式:关键字 6 | 关键字:url 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:注意网址的分类,是视频还是活动或者是文章。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /OG.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OG.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.setEnabled(True) 15 | MainWindow.resize(865, 675) 16 | MainWindow.setMinimumSize(QtCore.QSize(865, 675)) 17 | MainWindow.setMaximumSize(QtCore.QSize(865, 675)) 18 | MainWindow.setAnimated(True) 19 | self.centralwidget = QtWidgets.QWidget(MainWindow) 20 | self.centralwidget.setObjectName("centralwidget") 21 | self.frame = QtWidgets.QFrame(self.centralwidget) 22 | self.frame.setGeometry(QtCore.QRect(30, 40, 211, 551)) 23 | self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) 24 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 25 | self.frame.setObjectName("frame") 26 | self.treeWidget = QtWidgets.QTreeWidget(self.frame) 27 | self.treeWidget.setGeometry(QtCore.QRect(40, 10, 161, 511)) 28 | self.treeWidget.setObjectName("treeWidget") 29 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 30 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 31 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 32 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 33 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 34 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 35 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 36 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 37 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 38 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 39 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 40 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 41 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 42 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 43 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 44 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 45 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 46 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 47 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 48 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 49 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 50 | item_1 = QtWidgets.QTreeWidgetItem(item_0) 51 | item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget) 52 | self.frame_2 = QtWidgets.QFrame(self.centralwidget) 53 | self.frame_2.setGeometry(QtCore.QRect(250, 40, 511, 311)) 54 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 55 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 56 | self.frame_2.setObjectName("frame_2") 57 | self.textBrowser_2 = QtWidgets.QTextBrowser(self.frame_2) 58 | self.textBrowser_2.setGeometry(QtCore.QRect(10, 10, 491, 291)) 59 | self.textBrowser_2.setObjectName("textBrowser_2") 60 | self.frame_3 = QtWidgets.QFrame(self.centralwidget) 61 | self.frame_3.setGeometry(QtCore.QRect(250, 370, 511, 221)) 62 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 63 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 64 | self.frame_3.setObjectName("frame_3") 65 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_3) 66 | self.textBrowser.setGeometry(QtCore.QRect(10, 10, 491, 141)) 67 | self.textBrowser.setObjectName("textBrowser") 68 | self.pushButton = QtWidgets.QPushButton(self.frame_3) 69 | self.pushButton.setGeometry(QtCore.QRect(100, 170, 93, 28)) 70 | self.pushButton.setObjectName("pushButton") 71 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_3) 72 | self.pushButton_2.setGeometry(QtCore.QRect(290, 170, 93, 28)) 73 | self.pushButton_2.setObjectName("pushButton_2") 74 | MainWindow.setCentralWidget(self.centralwidget) 75 | self.menubar = QtWidgets.QMenuBar(MainWindow) 76 | self.menubar.setGeometry(QtCore.QRect(0, 0, 865, 26)) 77 | self.menubar.setObjectName("menubar") 78 | self.menu = QtWidgets.QMenu(self.menubar) 79 | self.menu.setObjectName("menu") 80 | self.menu_2 = QtWidgets.QMenu(self.menubar) 81 | self.menu_2.setObjectName("menu_2") 82 | MainWindow.setMenuBar(self.menubar) 83 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 84 | self.statusbar.setObjectName("statusbar") 85 | MainWindow.setStatusBar(self.statusbar) 86 | self.action = QtWidgets.QAction(MainWindow) 87 | self.action.setObjectName("action") 88 | self.menu.addAction(self.action) 89 | self.menubar.addAction(self.menu.menuAction()) 90 | self.menubar.addAction(self.menu_2.menuAction()) 91 | 92 | self.retranslateUi(MainWindow) 93 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 94 | 95 | def retranslateUi(self, MainWindow): 96 | _translate = QtCore.QCoreApplication.translate 97 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 98 | self.treeWidget.headerItem().setText(0, _translate("MainWindow", "分类")) 99 | __sortingEnabled = self.treeWidget.isSortingEnabled() 100 | self.treeWidget.setSortingEnabled(False) 101 | self.treeWidget.topLevelItem(0).setText(0, _translate("MainWindow", "电影")) 102 | self.treeWidget.topLevelItem(0).child(0).setText(0, _translate("MainWindow", "猫眼评分")) 103 | self.treeWidget.topLevelItem(1).setText(0, _translate("MainWindow", "美食")) 104 | self.treeWidget.topLevelItem(1).child(0).setText(0, _translate("MainWindow", "美团")) 105 | self.treeWidget.topLevelItem(2).setText(0, _translate("MainWindow", "电商")) 106 | self.treeWidget.topLevelItem(2).child(0).setText(0, _translate("MainWindow", "京东")) 107 | self.treeWidget.topLevelItem(3).setText(0, _translate("MainWindow", "新闻")) 108 | self.treeWidget.topLevelItem(3).child(0).setText(0, _translate("MainWindow", "微博榜单")) 109 | self.treeWidget.topLevelItem(3).child(1).setText(0, _translate("MainWindow", "微博话题")) 110 | self.treeWidget.topLevelItem(3).child(2).setText(0, _translate("MainWindow", "央视新闻")) 111 | self.treeWidget.topLevelItem(3).child(3).setText(0, _translate("MainWindow", "网易新闻")) 112 | self.treeWidget.topLevelItem(4).setText(0, _translate("MainWindow", "天气")) 113 | self.treeWidget.topLevelItem(4).child(0).setText(0, _translate("MainWindow", "中国天气网")) 114 | self.treeWidget.topLevelItem(5).setText(0, _translate("MainWindow", "视频")) 115 | self.treeWidget.topLevelItem(5).child(0).setText(0, _translate("MainWindow", "B站视频")) 116 | self.treeWidget.topLevelItem(5).child(1).setText(0, _translate("MainWindow", "B站视频弹幕")) 117 | self.treeWidget.topLevelItem(5).child(2).setText(0, _translate("MainWindow", "B站番剧弹幕")) 118 | self.treeWidget.topLevelItem(5).child(3).setText(0, _translate("MainWindow", "B站评论")) 119 | self.treeWidget.topLevelItem(6).setText(0, _translate("MainWindow", "汽车")) 120 | self.treeWidget.topLevelItem(6).child(0).setText(0, _translate("MainWindow", "太平洋汽车")) 121 | self.treeWidget.topLevelItem(7).setText(0, _translate("MainWindow", "招聘")) 122 | self.treeWidget.topLevelItem(7).child(0).setText(0, _translate("MainWindow", "无忧招聘网")) 123 | self.treeWidget.topLevelItem(8).setText(0, _translate("MainWindow", "其他")) 124 | self.treeWidget.setSortingEnabled(__sortingEnabled) 125 | self.textBrowser_2.setHtml(_translate("MainWindow", "\n" 126 | "\n" 129 | "

爬取内容:猫眼票房

\n" 130 | "

网页主站:https://maoyan.com/

\n" 131 | "

爬取站点(示例):https://maoyan.com/query?kw=%E7%A5%9E%E6%8E%A2%E7%8B%84%E4%BB%81%E6%9D%B0

\n" 132 | "

结果数量:1(关键字) * 1

\n" 133 | "

关键字:电影

\n" 134 | "

支持批量关键字:是

\n" 135 | "


\n" 136 | "

ip访问频率限制:暂无

\n" 137 | "


\n" 138 | "

注意:爬取内容为搜索结果中的第一个匹配项,请确保关键字准确。

")) 139 | self.pushButton.setText(_translate("MainWindow", "进入")) 140 | self.pushButton_2.setText(_translate("MainWindow", "退出")) 141 | self.menu.setTitle(_translate("MainWindow", "开始")) 142 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 143 | self.action.setText(_translate("MainWindow", "退出")) 144 | 145 | -------------------------------------------------------------------------------- /OG.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | true 7 | 8 | 9 | 10 | 0 11 | 0 12 | 865 13 | 675 14 | 15 | 16 | 17 | 18 | 865 19 | 675 20 | 21 | 22 | 23 | 24 | 865 25 | 675 26 | 27 | 28 | 29 | MainWindow 30 | 31 | 32 | true 33 | 34 | 35 | 36 | 37 | 38 | 30 39 | 40 40 | 211 41 | 551 42 | 43 | 44 | 45 | QFrame::StyledPanel 46 | 47 | 48 | QFrame::Raised 49 | 50 | 51 | 52 | 53 | 40 54 | 10 55 | 161 56 | 511 57 | 58 | 59 | 60 | 61 | 分类 62 | 63 | 64 | 65 | 66 | 电影 67 | 68 | 69 | 70 | 猫眼评分 71 | 72 | 73 | 74 | 75 | 76 | 美食 77 | 78 | 79 | 80 | 美团 81 | 82 | 83 | 84 | 85 | 86 | 电商 87 | 88 | 89 | 90 | 京东 91 | 92 | 93 | 94 | 95 | 96 | 新闻 97 | 98 | 99 | 100 | 微博榜单 101 | 102 | 103 | 104 | 105 | 微博话题 106 | 107 | 108 | 109 | 110 | 央视新闻 111 | 112 | 113 | 114 | 115 | 网易新闻 116 | 117 | 118 | 119 | 120 | 121 | 天气 122 | 123 | 124 | 125 | 中国天气网 126 | 127 | 128 | 129 | 130 | 131 | 视频 132 | 133 | 134 | 135 | B站视频 136 | 137 | 138 | 139 | 140 | B站视频弹幕 141 | 142 | 143 | 144 | 145 | B站番剧弹幕 146 | 147 | 148 | 149 | 150 | B站评论 151 | 152 | 153 | 154 | 155 | 156 | 汽车 157 | 158 | 159 | 160 | 太平洋汽车 161 | 162 | 163 | 164 | 165 | 166 | 招聘 167 | 168 | 169 | 170 | 无忧网 171 | 172 | 173 | 174 | 175 | 176 | 其他 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 250 185 | 40 186 | 511 187 | 311 188 | 189 | 190 | 191 | QFrame::StyledPanel 192 | 193 | 194 | QFrame::Raised 195 | 196 | 197 | 198 | 199 | 10 200 | 10 201 | 491 202 | 291 203 | 204 | 205 | 206 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 207 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 208 | p, li { white-space: pre-wrap; } 209 | </style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> 210 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">爬取内容:猫眼票房</p> 211 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">网页主站:https://maoyan.com/</p> 212 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">爬取站点(示例):https://maoyan.com/query?kw=%E7%A5%9E%E6%8E%A2%E7%8B%84%E4%BB%81%E6%9D%B0</p> 213 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">结果数量:1(关键字) * 1</p> 214 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">关键字:电影</p> 215 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">支持批量关键字:是</p> 216 | <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> 217 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ip访问频率限制:暂无</p> 218 | <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> 219 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">注意:爬取内容为搜索结果中的第一个匹配项,请确保关键字准确。</p></body></html> 220 | 221 | 222 | 223 | 224 | 225 | 226 | 250 227 | 370 228 | 511 229 | 221 230 | 231 | 232 | 233 | QFrame::StyledPanel 234 | 235 | 236 | QFrame::Raised 237 | 238 | 239 | 240 | 241 | 10 242 | 10 243 | 491 244 | 141 245 | 246 | 247 | 248 | 249 | 250 | 251 | 100 252 | 170 253 | 93 254 | 28 255 | 256 | 257 | 258 | 进入 259 | 260 | 261 | 262 | 263 | 264 | 290 265 | 170 266 | 93 267 | 28 268 | 269 | 270 | 271 | 退出 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 0 280 | 0 281 | 865 282 | 26 283 | 284 | 285 | 286 | 287 | 开始 288 | 289 | 290 | 291 | 292 | 293 | 帮助 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 退出 303 | 304 | 305 | 306 | 307 | 308 | 309 | -------------------------------------------------------------------------------- /OGbilibili.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OGbilibili.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 714) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(2) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_6 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(1) 32 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 33 | self.frame_6.setSizePolicy(sizePolicy) 34 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_6.setObjectName("frame_6") 37 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 38 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 39 | self.formLayout.setVerticalSpacing(20) 40 | self.formLayout.setObjectName("formLayout") 41 | self.label_1 = QtWidgets.QLabel(self.frame_6) 42 | self.label_1.setObjectName("label_1") 43 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_1) 44 | self.lineEdit_1 = QtWidgets.QLineEdit(self.frame_6) 45 | self.lineEdit_1.setObjectName("lineEdit_1") 46 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_1) 47 | self.label_2 = QtWidgets.QLabel(self.frame_6) 48 | self.label_2.setObjectName("label_2") 49 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 50 | self.verticalLayout_3 = QtWidgets.QVBoxLayout() 51 | self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) 52 | self.verticalLayout_3.setSpacing(10) 53 | self.verticalLayout_3.setObjectName("verticalLayout_3") 54 | self.radioButton_1 = QtWidgets.QRadioButton(self.frame_6) 55 | self.radioButton_1.setObjectName("radioButton_1") 56 | self.verticalLayout_3.addWidget(self.radioButton_1) 57 | self.radioButton_2 = QtWidgets.QRadioButton(self.frame_6) 58 | self.radioButton_2.setObjectName("radioButton_2") 59 | self.verticalLayout_3.addWidget(self.radioButton_2) 60 | self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.verticalLayout_3) 61 | self.label_6 = QtWidgets.QLabel(self.frame_6) 62 | self.label_6.setObjectName("label_6") 63 | self.formLayout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_6) 64 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 65 | self.pushButton_9.setObjectName("pushButton_9") 66 | self.formLayout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 67 | self.label = QtWidgets.QLabel(self.frame_6) 68 | self.label.setObjectName("label") 69 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label) 70 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_6) 71 | self.textBrowser.setEnabled(True) 72 | self.textBrowser.setObjectName("textBrowser") 73 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.textBrowser) 74 | self.label_5 = QtWidgets.QLabel(self.frame_6) 75 | self.label_5.setObjectName("label_5") 76 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_5) 77 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 78 | self.pushButton_8.setObjectName("pushButton_8") 79 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 80 | self.label_4 = QtWidgets.QLabel(self.frame_6) 81 | self.label_4.setObjectName("label_4") 82 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_4) 83 | self.horizontalLayout_8 = QtWidgets.QHBoxLayout() 84 | self.horizontalLayout_8.setContentsMargins(5, 5, 5, 5) 85 | self.horizontalLayout_8.setSpacing(15) 86 | self.horizontalLayout_8.setObjectName("horizontalLayout_8") 87 | self.spinBox_3 = QtWidgets.QSpinBox(self.frame_6) 88 | self.spinBox_3.setObjectName("spinBox_3") 89 | self.horizontalLayout_8.addWidget(self.spinBox_3) 90 | self.label_10 = QtWidgets.QLabel(self.frame_6) 91 | self.label_10.setObjectName("label_10") 92 | self.horizontalLayout_8.addWidget(self.label_10) 93 | self.spinBox_4 = QtWidgets.QSpinBox(self.frame_6) 94 | self.spinBox_4.setObjectName("spinBox_4") 95 | self.horizontalLayout_8.addWidget(self.spinBox_4) 96 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 97 | self.horizontalLayout_8.addItem(spacerItem) 98 | self.formLayout.setLayout(5, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_8) 99 | self.verticalLayout_4.addWidget(self.frame_6) 100 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 101 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 102 | sizePolicy.setHorizontalStretch(0) 103 | sizePolicy.setVerticalStretch(2) 104 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 105 | self.frame_4.setSizePolicy(sizePolicy) 106 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 107 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 108 | self.frame_4.setObjectName("frame_4") 109 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 110 | self.verticalLayout_5.setObjectName("verticalLayout_5") 111 | self.textBrowser_1 = QtWidgets.QTextBrowser(self.frame_4) 112 | self.textBrowser_1.setObjectName("textBrowser_1") 113 | self.verticalLayout_5.addWidget(self.textBrowser_1) 114 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 115 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 116 | self.pushButton_1 = QtWidgets.QPushButton(self.frame_4) 117 | self.pushButton_1.setObjectName("pushButton_1") 118 | self.horizontalLayout_4.addWidget(self.pushButton_1) 119 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 120 | self.pushButton_2.setObjectName("pushButton_2") 121 | self.horizontalLayout_4.addWidget(self.pushButton_2) 122 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 123 | self.pushButton_3.setObjectName("pushButton_3") 124 | self.horizontalLayout_4.addWidget(self.pushButton_3) 125 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 126 | self.verticalLayout_4.addWidget(self.frame_4) 127 | self.horizontalLayout.addWidget(self.groupBox) 128 | self.frame = QtWidgets.QFrame(self.centralwidget) 129 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 130 | sizePolicy.setHorizontalStretch(5) 131 | sizePolicy.setVerticalStretch(0) 132 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 133 | self.frame.setSizePolicy(sizePolicy) 134 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 135 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 136 | self.frame.setObjectName("frame") 137 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 138 | self.verticalLayout.setObjectName("verticalLayout") 139 | self.frame_2 = QtWidgets.QFrame(self.frame) 140 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 141 | sizePolicy.setHorizontalStretch(0) 142 | sizePolicy.setVerticalStretch(2) 143 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 144 | self.frame_2.setSizePolicy(sizePolicy) 145 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 146 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 147 | self.frame_2.setObjectName("frame_2") 148 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 149 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 150 | # self.tableView = QtWidgets.QTableView(self.frame_2) 151 | # self.tableView.setObjectName("tableView") 152 | # self.horizontalLayout_3.addWidget(self.tableView) 153 | self.verticalLayout.addWidget(self.frame_2) 154 | self.line = QtWidgets.QFrame(self.frame) 155 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 156 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 157 | self.line.setObjectName("line") 158 | self.verticalLayout.addWidget(self.line) 159 | self.frame_3 = QtWidgets.QFrame(self.frame) 160 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 161 | sizePolicy.setHorizontalStretch(0) 162 | sizePolicy.setVerticalStretch(1) 163 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 164 | self.frame_3.setSizePolicy(sizePolicy) 165 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 166 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 167 | self.frame_3.setObjectName("frame_3") 168 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 169 | self.verticalLayout_2.setObjectName("verticalLayout_2") 170 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_3) 171 | self.textBrowser_3.setObjectName("textBrowser_3") 172 | self.verticalLayout_2.addWidget(self.textBrowser_3) 173 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 174 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 175 | spacerItem1 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 176 | self.horizontalLayout_2.addItem(spacerItem1) 177 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 178 | self.pushButton_4.setObjectName("pushButton_4") 179 | self.horizontalLayout_2.addWidget(self.pushButton_4) 180 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 181 | self.pushButton_5.setObjectName("pushButton_5") 182 | self.horizontalLayout_2.addWidget(self.pushButton_5) 183 | spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 184 | self.horizontalLayout_2.addItem(spacerItem2) 185 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_3) 186 | self.pushButton_6.setObjectName("pushButton_6") 187 | self.horizontalLayout_2.addWidget(self.pushButton_6) 188 | spacerItem3 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 189 | self.horizontalLayout_2.addItem(spacerItem3) 190 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 191 | self.verticalLayout.addWidget(self.frame_3) 192 | self.horizontalLayout.addWidget(self.frame) 193 | MainWindow.setCentralWidget(self.centralwidget) 194 | self.menubar = QtWidgets.QMenuBar(MainWindow) 195 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 196 | self.menubar.setObjectName("menubar") 197 | self.menu = QtWidgets.QMenu(self.menubar) 198 | self.menu.setObjectName("menu") 199 | self.menu_2 = QtWidgets.QMenu(self.menubar) 200 | self.menu_2.setObjectName("menu_2") 201 | self.menu_3 = QtWidgets.QMenu(self.menubar) 202 | self.menu_3.setObjectName("menu_3") 203 | MainWindow.setMenuBar(self.menubar) 204 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 205 | self.statusbar.setObjectName("statusbar") 206 | MainWindow.setStatusBar(self.statusbar) 207 | self.action = QtWidgets.QAction(MainWindow) 208 | self.action.setObjectName("action") 209 | self.action_2 = QtWidgets.QAction(MainWindow) 210 | self.action_2.setObjectName("action_2") 211 | self.action_3 = QtWidgets.QAction(MainWindow) 212 | self.action_3.setObjectName("action_3") 213 | self.action_4 = QtWidgets.QAction(MainWindow) 214 | self.action_4.setObjectName("action_4") 215 | self.menu.addAction(self.action) 216 | self.menu_2.addAction(self.action_4) 217 | self.menu_3.addAction(self.action_2) 218 | self.menu_3.addAction(self.action_3) 219 | self.menubar.addAction(self.menu.menuAction()) 220 | self.menubar.addAction(self.menu_2.menuAction()) 221 | self.menubar.addAction(self.menu_3.menuAction()) 222 | 223 | self.retranslateUi(MainWindow) 224 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 225 | 226 | def retranslateUi(self, MainWindow): 227 | _translate = QtCore.QCoreApplication.translate 228 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 229 | self.groupBox.setTitle(_translate("MainWindow", "bilibili视频关键字")) 230 | self.label_1.setText(_translate("MainWindow", "话题名称:")) 231 | self.label_2.setText(_translate("MainWindow", "搜索规则:")) 232 | self.radioButton_1.setText(_translate("MainWindow", "单一关键字测试")) 233 | self.radioButton_2.setText(_translate("MainWindow", "批量关键字爬取")) 234 | self.label_6.setText(_translate("MainWindow", "导出文件:")) 235 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 236 | self.label.setText(_translate("MainWindow", "导入提示:")) 237 | self.textBrowser.setHtml(_translate("MainWindow", "\n" 238 | "\n" 241 | "

1.请确保文件后缀为(.xls),且文件能够打开

\n" 242 | "

2.程序将获取文件中第一个表格的第一列所有内容(包含标题)。请将需要搜索的话题全部移动到此区域内。

")) 243 | self.label_5.setText(_translate("MainWindow", "导入文件:")) 244 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 245 | self.label_4.setText(_translate("MainWindow", "搜索页数:")) 246 | self.label_10.setText(_translate("MainWindow", "至")) 247 | self.pushButton_1.setText(_translate("MainWindow", "检查参数")) 248 | self.pushButton_2.setText(_translate("MainWindow", "清空参数")) 249 | self.pushButton_3.setText(_translate("MainWindow", "清空提示窗口")) 250 | self.pushButton_4.setText(_translate("MainWindow", "开始")) 251 | self.pushButton_5.setText(_translate("MainWindow", "中止")) 252 | self.pushButton_6.setText(_translate("MainWindow", "导出至Excel")) 253 | self.menu.setTitle(_translate("MainWindow", "数据库")) 254 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 255 | self.menu_3.setTitle(_translate("MainWindow", "关于")) 256 | self.action.setText(_translate("MainWindow", "连接数据库(待开发)")) 257 | self.action_2.setText(_translate("MainWindow", "版本")) 258 | self.action_3.setText(_translate("MainWindow", "制作人")) 259 | self.action_4.setText(_translate("MainWindow", "联系我们")) 260 | 261 | -------------------------------------------------------------------------------- /OGfanjudanmu.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OGfanjudanmu.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 714) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(2) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_6 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(1) 32 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 33 | self.frame_6.setSizePolicy(sizePolicy) 34 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_6.setObjectName("frame_6") 37 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 38 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 39 | self.formLayout.setVerticalSpacing(20) 40 | self.formLayout.setObjectName("formLayout") 41 | self.label_1 = QtWidgets.QLabel(self.frame_6) 42 | self.label_1.setObjectName("label_1") 43 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_1) 44 | self.lineEdit_1 = QtWidgets.QLineEdit(self.frame_6) 45 | self.lineEdit_1.setObjectName("lineEdit_1") 46 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_1) 47 | self.label = QtWidgets.QLabel(self.frame_6) 48 | self.label.setObjectName("label") 49 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label) 50 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_6) 51 | self.textBrowser.setEnabled(True) 52 | self.textBrowser.setObjectName("textBrowser") 53 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.textBrowser) 54 | self.label_4 = QtWidgets.QLabel(self.frame_6) 55 | self.label_4.setObjectName("label_4") 56 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_4) 57 | self.horizontalLayout_8 = QtWidgets.QHBoxLayout() 58 | self.horizontalLayout_8.setContentsMargins(5, 5, 5, 5) 59 | self.horizontalLayout_8.setSpacing(15) 60 | self.horizontalLayout_8.setObjectName("horizontalLayout_8") 61 | self.spinBox_3 = QtWidgets.QSpinBox(self.frame_6) 62 | self.spinBox_3.setObjectName("spinBox_3") 63 | self.horizontalLayout_8.addWidget(self.spinBox_3) 64 | self.label_10 = QtWidgets.QLabel(self.frame_6) 65 | self.label_10.setObjectName("label_10") 66 | self.horizontalLayout_8.addWidget(self.label_10) 67 | self.spinBox_4 = QtWidgets.QSpinBox(self.frame_6) 68 | self.spinBox_4.setObjectName("spinBox_4") 69 | self.horizontalLayout_8.addWidget(self.spinBox_4) 70 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 71 | self.horizontalLayout_8.addItem(spacerItem) 72 | self.formLayout.setLayout(4, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_8) 73 | self.label_5 = QtWidgets.QLabel(self.frame_6) 74 | self.label_5.setObjectName("label_5") 75 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_5) 76 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 77 | self.pushButton_8.setObjectName("pushButton_8") 78 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 79 | self.label_6 = QtWidgets.QLabel(self.frame_6) 80 | self.label_6.setObjectName("label_6") 81 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_6) 82 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 83 | self.pushButton_9.setObjectName("pushButton_9") 84 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 85 | self.verticalLayout_4.addWidget(self.frame_6) 86 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 87 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 88 | sizePolicy.setHorizontalStretch(0) 89 | sizePolicy.setVerticalStretch(1) 90 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 91 | self.frame_4.setSizePolicy(sizePolicy) 92 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 93 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 94 | self.frame_4.setObjectName("frame_4") 95 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 96 | self.verticalLayout_5.setObjectName("verticalLayout_5") 97 | self.textBrowser_1 = QtWidgets.QTextBrowser(self.frame_4) 98 | self.textBrowser_1.setObjectName("textBrowser_1") 99 | self.verticalLayout_5.addWidget(self.textBrowser_1) 100 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 101 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 102 | self.pushButton_1 = QtWidgets.QPushButton(self.frame_4) 103 | self.pushButton_1.setObjectName("pushButton_1") 104 | self.horizontalLayout_4.addWidget(self.pushButton_1) 105 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 106 | self.pushButton_2.setObjectName("pushButton_2") 107 | self.horizontalLayout_4.addWidget(self.pushButton_2) 108 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 109 | self.pushButton_3.setObjectName("pushButton_3") 110 | self.horizontalLayout_4.addWidget(self.pushButton_3) 111 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 112 | self.verticalLayout_4.addWidget(self.frame_4) 113 | self.horizontalLayout.addWidget(self.groupBox) 114 | self.frame = QtWidgets.QFrame(self.centralwidget) 115 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 116 | sizePolicy.setHorizontalStretch(5) 117 | sizePolicy.setVerticalStretch(0) 118 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 119 | self.frame.setSizePolicy(sizePolicy) 120 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 121 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 122 | self.frame.setObjectName("frame") 123 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 124 | self.verticalLayout.setObjectName("verticalLayout") 125 | self.frame_2 = QtWidgets.QFrame(self.frame) 126 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 127 | sizePolicy.setHorizontalStretch(0) 128 | sizePolicy.setVerticalStretch(2) 129 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 130 | self.frame_2.setSizePolicy(sizePolicy) 131 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 132 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 133 | self.frame_2.setObjectName("frame_2") 134 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 135 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 136 | # self.tableView = QtWidgets.QTableView(self.frame_2) 137 | # self.tableView.setObjectName("tableView") 138 | # self.horizontalLayout_3.addWidget(self.tableView) 139 | self.verticalLayout.addWidget(self.frame_2) 140 | self.line = QtWidgets.QFrame(self.frame) 141 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 142 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 143 | self.line.setObjectName("line") 144 | self.verticalLayout.addWidget(self.line) 145 | self.frame_3 = QtWidgets.QFrame(self.frame) 146 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 147 | sizePolicy.setHorizontalStretch(0) 148 | sizePolicy.setVerticalStretch(1) 149 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 150 | self.frame_3.setSizePolicy(sizePolicy) 151 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 152 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 153 | self.frame_3.setObjectName("frame_3") 154 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 155 | self.verticalLayout_2.setObjectName("verticalLayout_2") 156 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_3) 157 | self.textBrowser_3.setObjectName("textBrowser_3") 158 | self.verticalLayout_2.addWidget(self.textBrowser_3) 159 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 160 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 161 | spacerItem1 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 162 | self.horizontalLayout_2.addItem(spacerItem1) 163 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 164 | self.pushButton_4.setObjectName("pushButton_4") 165 | self.horizontalLayout_2.addWidget(self.pushButton_4) 166 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 167 | self.pushButton_5.setObjectName("pushButton_5") 168 | self.horizontalLayout_2.addWidget(self.pushButton_5) 169 | spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 170 | self.horizontalLayout_2.addItem(spacerItem2) 171 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_3) 172 | self.pushButton_6.setObjectName("pushButton_6") 173 | self.horizontalLayout_2.addWidget(self.pushButton_6) 174 | spacerItem3 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 175 | self.horizontalLayout_2.addItem(spacerItem3) 176 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 177 | self.verticalLayout.addWidget(self.frame_3) 178 | self.horizontalLayout.addWidget(self.frame) 179 | MainWindow.setCentralWidget(self.centralwidget) 180 | self.menubar = QtWidgets.QMenuBar(MainWindow) 181 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 182 | self.menubar.setObjectName("menubar") 183 | self.menu = QtWidgets.QMenu(self.menubar) 184 | self.menu.setObjectName("menu") 185 | self.menu_2 = QtWidgets.QMenu(self.menubar) 186 | self.menu_2.setObjectName("menu_2") 187 | self.menu_3 = QtWidgets.QMenu(self.menubar) 188 | self.menu_3.setObjectName("menu_3") 189 | MainWindow.setMenuBar(self.menubar) 190 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 191 | self.statusbar.setObjectName("statusbar") 192 | MainWindow.setStatusBar(self.statusbar) 193 | self.action = QtWidgets.QAction(MainWindow) 194 | self.action.setObjectName("action") 195 | self.action_2 = QtWidgets.QAction(MainWindow) 196 | self.action_2.setObjectName("action_2") 197 | self.action_3 = QtWidgets.QAction(MainWindow) 198 | self.action_3.setObjectName("action_3") 199 | self.action_4 = QtWidgets.QAction(MainWindow) 200 | self.action_4.setObjectName("action_4") 201 | self.menu.addAction(self.action) 202 | self.menu_2.addAction(self.action_4) 203 | self.menu_3.addAction(self.action_2) 204 | self.menu_3.addAction(self.action_3) 205 | self.menubar.addAction(self.menu.menuAction()) 206 | self.menubar.addAction(self.menu_2.menuAction()) 207 | self.menubar.addAction(self.menu_3.menuAction()) 208 | 209 | self.retranslateUi(MainWindow) 210 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 211 | 212 | def retranslateUi(self, MainWindow): 213 | _translate = QtCore.QCoreApplication.translate 214 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 215 | self.groupBox.setTitle(_translate("MainWindow", "bilibili番剧弹幕")) 216 | self.label_1.setText(_translate("MainWindow", "番剧ep号:")) 217 | self.label.setText(_translate("MainWindow", "导入提示:")) 218 | self.textBrowser.setHtml(_translate("MainWindow", "\n" 219 | "\n" 222 | "

1.请确保文件后缀为(.xls),且文件能够打开

\n" 223 | "

2.番剧ep号为一部番剧任意一集网址最后的数字,如点兔第一集第一集网址https://www.bilibili.com/bangumi/play/ep95840?from=search&seid=12453105052239622776,则ep号为ep后面的数字:95840\n" 224 | "

3.请确保第一列全为ep号(纯数字)。不能为ep:123123

\n" 225 | "

4.每一集弹幕最大量为3000,excel文件最多支持65000行,所以能爬取18集以下的番剧(虽然一般是12集),对与半年番(大于18集)请麻烦分集爬取。

")) 226 | self.label_4.setText(_translate("MainWindow", "搜索集数:")) 227 | self.label_10.setText(_translate("MainWindow", "至")) 228 | self.label_5.setText(_translate("MainWindow", "导入文件:")) 229 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 230 | self.label_6.setText(_translate("MainWindow", "导出文件:")) 231 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 232 | self.pushButton_1.setText(_translate("MainWindow", "检查参数")) 233 | self.pushButton_2.setText(_translate("MainWindow", "清空参数")) 234 | self.pushButton_3.setText(_translate("MainWindow", "清空提示窗口")) 235 | self.pushButton_4.setText(_translate("MainWindow", "开始")) 236 | self.pushButton_5.setText(_translate("MainWindow", "中止")) 237 | self.pushButton_6.setText(_translate("MainWindow", "导出至Excel")) 238 | self.menu.setTitle(_translate("MainWindow", "数据库")) 239 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 240 | self.menu_3.setTitle(_translate("MainWindow", "关于")) 241 | self.action.setText(_translate("MainWindow", "连接数据库(待开发)")) 242 | self.action_2.setText(_translate("MainWindow", "版本")) 243 | self.action_3.setText(_translate("MainWindow", "制作人")) 244 | self.action_4.setText(_translate("MainWindow", "联系我们")) 245 | 246 | -------------------------------------------------------------------------------- /OGfanjudanmu.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1041 10 | 714 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 2 23 | 5 24 | 25 | 26 | 27 | bilibili番剧弹幕 28 | 29 | 30 | 31 | 32 | 33 | 34 | 0 35 | 1 36 | 37 | 38 | 39 | QFrame::StyledPanel 40 | 41 | 42 | QFrame::Raised 43 | 44 | 45 | 46 | QFormLayout::AllNonFixedFieldsGrow 47 | 48 | 49 | 20 50 | 51 | 52 | 53 | 54 | 番剧ep号: 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 导入提示: 65 | 66 | 67 | 68 | 69 | 70 | 71 | true 72 | 73 | 74 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 75 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 76 | p, li { white-space: pre-wrap; } 77 | </style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> 78 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">1.请确保文件后缀为(.xls),且文件能够打开</p> 79 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">2.请确保第一列全为ep号(纯数字)。不能为av:123123</p> 80 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">3.每一集弹幕最大量为3000,excel文件最多支持65000行,所以能爬取18集以下的番剧(虽然一般是12集),对与半年番(大于18集)请麻烦分集爬取。</p></body></html> 81 | 82 | 83 | 84 | 85 | 86 | 87 | 搜索集数: 88 | 89 | 90 | 91 | 92 | 93 | 94 | 15 95 | 96 | 97 | 5 98 | 99 | 100 | 5 101 | 102 | 103 | 5 104 | 105 | 106 | 5 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | Qt::Horizontal 125 | 126 | 127 | 128 | 40 129 | 20 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 导入文件: 140 | 141 | 142 | 143 | 144 | 145 | 146 | 点击选择 147 | 148 | 149 | 150 | 151 | 152 | 153 | 导出文件: 154 | 155 | 156 | 157 | 158 | 159 | 160 | 点击选择 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0 172 | 1 173 | 174 | 175 | 176 | QFrame::StyledPanel 177 | 178 | 179 | QFrame::Raised 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 检查参数 191 | 192 | 193 | 194 | 195 | 196 | 197 | 清空参数 198 | 199 | 200 | 201 | 202 | 203 | 204 | 清空提示窗口 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 5 221 | 0 222 | 223 | 224 | 225 | QFrame::Box 226 | 227 | 228 | QFrame::Raised 229 | 230 | 231 | 232 | 233 | 234 | 235 | 0 236 | 2 237 | 238 | 239 | 240 | QFrame::StyledPanel 241 | 242 | 243 | QFrame::Raised 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | Qt::Horizontal 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 0 264 | 1 265 | 266 | 267 | 268 | QFrame::StyledPanel 269 | 270 | 271 | QFrame::Raised 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | Qt::Horizontal 283 | 284 | 285 | 286 | 168 287 | 20 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 开始 296 | 297 | 298 | 299 | 300 | 301 | 302 | 中止 303 | 304 | 305 | 306 | 307 | 308 | 309 | Qt::Horizontal 310 | 311 | 312 | 313 | 40 314 | 20 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 导出至Excel 323 | 324 | 325 | 326 | 327 | 328 | 329 | Qt::Horizontal 330 | 331 | 332 | 333 | 168 334 | 20 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 0 353 | 0 354 | 1041 355 | 26 356 | 357 | 358 | 359 | 360 | 数据库 361 | 362 | 363 | 364 | 365 | 366 | 帮助 367 | 368 | 369 | 370 | 371 | 372 | 关于 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 连接数据库(待开发) 385 | 386 | 387 | 388 | 389 | 版本 390 | 391 | 392 | 393 | 394 | 制作人 395 | 396 | 397 | 398 | 399 | 联系我们 400 | 401 | 402 | 403 | 404 | 405 | 406 | -------------------------------------------------------------------------------- /OGmainck.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | true 7 | 8 | 9 | 10 | 0 11 | 0 12 | 865 13 | 675 14 | 15 | 16 | 17 | 18 | 865 19 | 675 20 | 21 | 22 | 23 | 24 | 865 25 | 675 26 | 27 | 28 | 29 | MainWindow 30 | 31 | 32 | true 33 | 34 | 35 | 36 | 37 | 38 | 30 39 | 40 40 | 211 41 | 551 42 | 43 | 44 | 45 | QFrame::StyledPanel 46 | 47 | 48 | QFrame::Raised 49 | 50 | 51 | 52 | 53 | 40 54 | 10 55 | 161 56 | 511 57 | 58 | 59 | 60 | 61 | 分类 62 | 63 | 64 | 65 | 66 | 电影 67 | 68 | 69 | 70 | 猫眼票房 71 | 72 | 73 | 74 | 75 | 76 | 美食 77 | 78 | 79 | 80 | 美团 81 | 82 | 83 | 84 | 85 | 86 | 电商 87 | 88 | 89 | 90 | 京东 91 | 92 | 93 | 94 | 95 | 96 | 新闻 97 | 98 | 99 | 100 | 微博榜单 101 | 102 | 103 | 104 | 105 | 微博话题 106 | 107 | 108 | 109 | 110 | 111 | 天气 112 | 113 | 114 | 115 | 中国天气网 116 | 117 | 118 | 119 | 120 | 121 | 视频 122 | 123 | 124 | 125 | B站视频 126 | 127 | 128 | 129 | 130 | B站视频弹幕 131 | 132 | 133 | 134 | 135 | B站番剧弹幕 136 | 137 | 138 | 139 | 140 | 141 | 汽车 142 | 143 | 144 | 145 | 太平洋汽车 146 | 147 | 148 | 149 | 150 | 151 | 其他 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 250 160 | 40 161 | 511 162 | 311 163 | 164 | 165 | 166 | QFrame::StyledPanel 167 | 168 | 169 | QFrame::Raised 170 | 171 | 172 | 173 | 174 | 10 175 | 10 176 | 491 177 | 291 178 | 179 | 180 | 181 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 182 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 183 | p, li { white-space: pre-wrap; } 184 | </style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;"> 185 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">爬取内容:猫眼票房</p> 186 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">网页主站:https://maoyan.com/</p> 187 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">爬取站点(示例):https://maoyan.com/query?kw=%E7%A5%9E%E6%8E%A2%E7%8B%84%E4%BB%81%E6%9D%B0</p> 188 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">结果数量:1(关键字) * 1</p> 189 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">关键字:电影</p> 190 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">支持批量关键字:是</p> 191 | <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> 192 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ip访问频率限制:暂无</p> 193 | <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> 194 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">注意:爬取内容为搜索结果中的第一个匹配项,请确保关键字准确。</p></body></html> 195 | 196 | 197 | 198 | 199 | 200 | 201 | 250 202 | 370 203 | 511 204 | 221 205 | 206 | 207 | 208 | QFrame::StyledPanel 209 | 210 | 211 | QFrame::Raised 212 | 213 | 214 | 215 | 216 | 10 217 | 10 218 | 491 219 | 141 220 | 221 | 222 | 223 | 224 | 225 | 226 | 100 227 | 170 228 | 93 229 | 28 230 | 231 | 232 | 233 | 进入 234 | 235 | 236 | 237 | 238 | 239 | 290 240 | 170 241 | 93 242 | 28 243 | 244 | 245 | 246 | 退出 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 0 255 | 0 256 | 865 257 | 26 258 | 259 | 260 | 261 | 262 | 开始 263 | 264 | 265 | 266 | 267 | 268 | 帮助 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 退出 278 | 279 | 280 | 281 | 282 | 283 | 284 | -------------------------------------------------------------------------------- /OGmaoyanpiaofang.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OGmaoyanpiaofang.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 714) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(2) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_6 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(1) 32 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 33 | self.frame_6.setSizePolicy(sizePolicy) 34 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_6.setObjectName("frame_6") 37 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 38 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 39 | self.formLayout.setVerticalSpacing(20) 40 | self.formLayout.setObjectName("formLayout") 41 | self.label_2 = QtWidgets.QLabel(self.frame_6) 42 | self.label_2.setObjectName("label_2") 43 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2) 44 | self.verticalLayout_3 = QtWidgets.QVBoxLayout() 45 | self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) 46 | self.verticalLayout_3.setSpacing(10) 47 | self.verticalLayout_3.setObjectName("verticalLayout_3") 48 | self.radioButton_1 = QtWidgets.QRadioButton(self.frame_6) 49 | self.radioButton_1.setObjectName("radioButton_1") 50 | self.verticalLayout_3.addWidget(self.radioButton_1) 51 | self.radioButton_2 = QtWidgets.QRadioButton(self.frame_6) 52 | self.radioButton_2.setObjectName("radioButton_2") 53 | self.verticalLayout_3.addWidget(self.radioButton_2) 54 | self.formLayout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.verticalLayout_3) 55 | self.label_5 = QtWidgets.QLabel(self.frame_6) 56 | self.label_5.setObjectName("label_5") 57 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_5) 58 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 59 | self.pushButton_8.setObjectName("pushButton_8") 60 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 61 | self.label_6 = QtWidgets.QLabel(self.frame_6) 62 | self.label_6.setObjectName("label_6") 63 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_6) 64 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 65 | self.pushButton_9.setObjectName("pushButton_9") 66 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 67 | self.label = QtWidgets.QLabel(self.frame_6) 68 | self.label.setObjectName("label") 69 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label) 70 | self.label_3 = QtWidgets.QLabel(self.frame_6) 71 | self.label_3.setObjectName("label_3") 72 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3) 73 | self.horizontalLayout_5 = QtWidgets.QHBoxLayout() 74 | self.horizontalLayout_5.setObjectName("horizontalLayout_5") 75 | self.dateEdit = QtWidgets.QDateEdit(self.frame_6) 76 | self.dateEdit.setObjectName("dateEdit") 77 | self.horizontalLayout_5.addWidget(self.dateEdit) 78 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 79 | self.horizontalLayout_5.addItem(spacerItem) 80 | self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_5) 81 | self.horizontalLayout_6 = QtWidgets.QHBoxLayout() 82 | self.horizontalLayout_6.setObjectName("horizontalLayout_6") 83 | self.dateEdit_2 = QtWidgets.QDateEdit(self.frame_6) 84 | self.dateEdit_2.setObjectName("dateEdit_2") 85 | self.horizontalLayout_6.addWidget(self.dateEdit_2) 86 | spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 87 | self.horizontalLayout_6.addItem(spacerItem1) 88 | self.formLayout.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_6) 89 | self.verticalLayout_4.addWidget(self.frame_6) 90 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 91 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 92 | sizePolicy.setHorizontalStretch(0) 93 | sizePolicy.setVerticalStretch(2) 94 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 95 | self.frame_4.setSizePolicy(sizePolicy) 96 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 97 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 98 | self.frame_4.setObjectName("frame_4") 99 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 100 | self.verticalLayout_5.setObjectName("verticalLayout_5") 101 | self.textBrowser_1 = QtWidgets.QTextBrowser(self.frame_4) 102 | self.textBrowser_1.setObjectName("textBrowser_1") 103 | self.verticalLayout_5.addWidget(self.textBrowser_1) 104 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 105 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 106 | self.pushButton_1 = QtWidgets.QPushButton(self.frame_4) 107 | self.pushButton_1.setObjectName("pushButton_1") 108 | self.horizontalLayout_4.addWidget(self.pushButton_1) 109 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 110 | self.pushButton_2.setObjectName("pushButton_2") 111 | self.horizontalLayout_4.addWidget(self.pushButton_2) 112 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 113 | self.pushButton_3.setObjectName("pushButton_3") 114 | self.horizontalLayout_4.addWidget(self.pushButton_3) 115 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 116 | self.verticalLayout_4.addWidget(self.frame_4) 117 | self.horizontalLayout.addWidget(self.groupBox) 118 | self.frame = QtWidgets.QFrame(self.centralwidget) 119 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 120 | sizePolicy.setHorizontalStretch(5) 121 | sizePolicy.setVerticalStretch(0) 122 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 123 | self.frame.setSizePolicy(sizePolicy) 124 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 125 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 126 | self.frame.setObjectName("frame") 127 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 128 | self.verticalLayout.setObjectName("verticalLayout") 129 | self.frame_2 = QtWidgets.QFrame(self.frame) 130 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 131 | sizePolicy.setHorizontalStretch(0) 132 | sizePolicy.setVerticalStretch(2) 133 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 134 | self.frame_2.setSizePolicy(sizePolicy) 135 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 136 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 137 | self.frame_2.setObjectName("frame_2") 138 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 139 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 140 | # self.tableView = QtWidgets.QTableView(self.frame_2) 141 | # self.tableView.setObjectName("tableView") 142 | # self.horizontalLayout_3.addWidget(self.tableView) 143 | self.verticalLayout.addWidget(self.frame_2) 144 | self.line = QtWidgets.QFrame(self.frame) 145 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 146 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 147 | self.line.setObjectName("line") 148 | self.verticalLayout.addWidget(self.line) 149 | self.frame_3 = QtWidgets.QFrame(self.frame) 150 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 151 | sizePolicy.setHorizontalStretch(0) 152 | sizePolicy.setVerticalStretch(1) 153 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 154 | self.frame_3.setSizePolicy(sizePolicy) 155 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 156 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 157 | self.frame_3.setObjectName("frame_3") 158 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 159 | self.verticalLayout_2.setObjectName("verticalLayout_2") 160 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_3) 161 | self.textBrowser_3.setObjectName("textBrowser_3") 162 | self.verticalLayout_2.addWidget(self.textBrowser_3) 163 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 164 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 165 | spacerItem2 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 166 | self.horizontalLayout_2.addItem(spacerItem2) 167 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 168 | self.pushButton_4.setObjectName("pushButton_4") 169 | self.horizontalLayout_2.addWidget(self.pushButton_4) 170 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 171 | self.pushButton_5.setObjectName("pushButton_5") 172 | self.horizontalLayout_2.addWidget(self.pushButton_5) 173 | spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 174 | self.horizontalLayout_2.addItem(spacerItem3) 175 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_3) 176 | self.pushButton_6.setObjectName("pushButton_6") 177 | self.horizontalLayout_2.addWidget(self.pushButton_6) 178 | spacerItem4 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 179 | self.horizontalLayout_2.addItem(spacerItem4) 180 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 181 | self.verticalLayout.addWidget(self.frame_3) 182 | self.horizontalLayout.addWidget(self.frame) 183 | MainWindow.setCentralWidget(self.centralwidget) 184 | self.menubar = QtWidgets.QMenuBar(MainWindow) 185 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 186 | self.menubar.setObjectName("menubar") 187 | self.menu = QtWidgets.QMenu(self.menubar) 188 | self.menu.setObjectName("menu") 189 | self.menu_2 = QtWidgets.QMenu(self.menubar) 190 | self.menu_2.setObjectName("menu_2") 191 | self.menu_3 = QtWidgets.QMenu(self.menubar) 192 | self.menu_3.setObjectName("menu_3") 193 | MainWindow.setMenuBar(self.menubar) 194 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 195 | self.statusbar.setObjectName("statusbar") 196 | MainWindow.setStatusBar(self.statusbar) 197 | self.action = QtWidgets.QAction(MainWindow) 198 | self.action.setObjectName("action") 199 | self.action_2 = QtWidgets.QAction(MainWindow) 200 | self.action_2.setObjectName("action_2") 201 | self.action_3 = QtWidgets.QAction(MainWindow) 202 | self.action_3.setObjectName("action_3") 203 | self.action_4 = QtWidgets.QAction(MainWindow) 204 | self.action_4.setObjectName("action_4") 205 | self.menu.addAction(self.action) 206 | self.menu_2.addAction(self.action_4) 207 | self.menu_3.addAction(self.action_2) 208 | self.menu_3.addAction(self.action_3) 209 | self.menubar.addAction(self.menu.menuAction()) 210 | self.menubar.addAction(self.menu_2.menuAction()) 211 | self.menubar.addAction(self.menu_3.menuAction()) 212 | 213 | self.retranslateUi(MainWindow) 214 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 215 | 216 | def retranslateUi(self, MainWindow): 217 | _translate = QtCore.QCoreApplication.translate 218 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 219 | self.groupBox.setTitle(_translate("MainWindow", "猫眼票房")) 220 | self.label_2.setText(_translate("MainWindow", "搜索规则:")) 221 | self.radioButton_1.setText(_translate("MainWindow", "实时票房(当前时间)")) 222 | self.radioButton_2.setText(_translate("MainWindow", "时间段票房(每日)")) 223 | self.label_5.setText(_translate("MainWindow", "导入文件:")) 224 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 225 | self.label_6.setText(_translate("MainWindow", "导出文件:")) 226 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 227 | self.label.setText(_translate("MainWindow", "开始日期:")) 228 | self.label_3.setText(_translate("MainWindow", "结束日期:")) 229 | self.pushButton_1.setText(_translate("MainWindow", "检查参数")) 230 | self.pushButton_2.setText(_translate("MainWindow", "清空参数")) 231 | self.pushButton_3.setText(_translate("MainWindow", "清空提示窗口")) 232 | self.pushButton_4.setText(_translate("MainWindow", "开始")) 233 | self.pushButton_5.setText(_translate("MainWindow", "中止")) 234 | self.pushButton_6.setText(_translate("MainWindow", "导入至Excel")) 235 | self.menu.setTitle(_translate("MainWindow", "数据库")) 236 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 237 | self.menu_3.setTitle(_translate("MainWindow", "关于")) 238 | self.action.setText(_translate("MainWindow", "连接数据库(待开发)")) 239 | self.action_2.setText(_translate("MainWindow", "版本")) 240 | self.action_3.setText(_translate("MainWindow", "制作人")) 241 | self.action_4.setText(_translate("MainWindow", "联系我们")) 242 | 243 | -------------------------------------------------------------------------------- /OGmaoyanpingfen.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OGmaoyanpingfen.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 714) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(2) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_6 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(1) 32 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 33 | self.frame_6.setSizePolicy(sizePolicy) 34 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_6.setObjectName("frame_6") 37 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 38 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 39 | self.formLayout.setVerticalSpacing(20) 40 | self.formLayout.setObjectName("formLayout") 41 | self.label_1 = QtWidgets.QLabel(self.frame_6) 42 | self.label_1.setObjectName("label_1") 43 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_1) 44 | self.lineEdit_1 = QtWidgets.QLineEdit(self.frame_6) 45 | self.lineEdit_1.setObjectName("lineEdit_1") 46 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_1) 47 | self.label_2 = QtWidgets.QLabel(self.frame_6) 48 | self.label_2.setObjectName("label_2") 49 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 50 | self.verticalLayout_3 = QtWidgets.QVBoxLayout() 51 | self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) 52 | self.verticalLayout_3.setSpacing(10) 53 | self.verticalLayout_3.setObjectName("verticalLayout_3") 54 | self.radioButton_1 = QtWidgets.QRadioButton(self.frame_6) 55 | self.radioButton_1.setObjectName("radioButton_1") 56 | self.verticalLayout_3.addWidget(self.radioButton_1) 57 | self.radioButton_2 = QtWidgets.QRadioButton(self.frame_6) 58 | self.radioButton_2.setObjectName("radioButton_2") 59 | self.verticalLayout_3.addWidget(self.radioButton_2) 60 | self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.verticalLayout_3) 61 | self.label_6 = QtWidgets.QLabel(self.frame_6) 62 | self.label_6.setObjectName("label_6") 63 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_6) 64 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 65 | self.pushButton_9.setObjectName("pushButton_9") 66 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 67 | self.label = QtWidgets.QLabel(self.frame_6) 68 | self.label.setObjectName("label") 69 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label) 70 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_6) 71 | self.textBrowser.setEnabled(True) 72 | self.textBrowser.setObjectName("textBrowser") 73 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.textBrowser) 74 | self.label_5 = QtWidgets.QLabel(self.frame_6) 75 | self.label_5.setObjectName("label_5") 76 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_5) 77 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 78 | self.pushButton_8.setObjectName("pushButton_8") 79 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 80 | self.verticalLayout_4.addWidget(self.frame_6) 81 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 82 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 83 | sizePolicy.setHorizontalStretch(0) 84 | sizePolicy.setVerticalStretch(2) 85 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 86 | self.frame_4.setSizePolicy(sizePolicy) 87 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 88 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 89 | self.frame_4.setObjectName("frame_4") 90 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 91 | self.verticalLayout_5.setObjectName("verticalLayout_5") 92 | self.textBrowser_1 = QtWidgets.QTextBrowser(self.frame_4) 93 | self.textBrowser_1.setObjectName("textBrowser_1") 94 | self.verticalLayout_5.addWidget(self.textBrowser_1) 95 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 96 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 97 | self.pushButton_1 = QtWidgets.QPushButton(self.frame_4) 98 | self.pushButton_1.setObjectName("pushButton_1") 99 | self.horizontalLayout_4.addWidget(self.pushButton_1) 100 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 101 | self.pushButton_2.setObjectName("pushButton_2") 102 | self.horizontalLayout_4.addWidget(self.pushButton_2) 103 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 104 | self.pushButton_3.setObjectName("pushButton_3") 105 | self.horizontalLayout_4.addWidget(self.pushButton_3) 106 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 107 | self.verticalLayout_4.addWidget(self.frame_4) 108 | self.horizontalLayout.addWidget(self.groupBox) 109 | self.frame = QtWidgets.QFrame(self.centralwidget) 110 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 111 | sizePolicy.setHorizontalStretch(5) 112 | sizePolicy.setVerticalStretch(0) 113 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 114 | self.frame.setSizePolicy(sizePolicy) 115 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 116 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 117 | self.frame.setObjectName("frame") 118 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 119 | self.verticalLayout.setObjectName("verticalLayout") 120 | self.frame_2 = QtWidgets.QFrame(self.frame) 121 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 122 | sizePolicy.setHorizontalStretch(0) 123 | sizePolicy.setVerticalStretch(2) 124 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 125 | self.frame_2.setSizePolicy(sizePolicy) 126 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 127 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 128 | self.frame_2.setObjectName("frame_2") 129 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 130 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 131 | # self.tableView = QtWidgets.QTableView(self.frame_2) 132 | # self.tableView.setObjectName("tableView") 133 | # self.horizontalLayout_3.addWidget(self.tableView) 134 | self.verticalLayout.addWidget(self.frame_2) 135 | self.line = QtWidgets.QFrame(self.frame) 136 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 137 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 138 | self.line.setObjectName("line") 139 | self.verticalLayout.addWidget(self.line) 140 | self.frame_3 = QtWidgets.QFrame(self.frame) 141 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 142 | sizePolicy.setHorizontalStretch(0) 143 | sizePolicy.setVerticalStretch(1) 144 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 145 | self.frame_3.setSizePolicy(sizePolicy) 146 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 147 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 148 | self.frame_3.setObjectName("frame_3") 149 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 150 | self.verticalLayout_2.setObjectName("verticalLayout_2") 151 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_3) 152 | self.textBrowser_3.setObjectName("textBrowser_3") 153 | self.verticalLayout_2.addWidget(self.textBrowser_3) 154 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 155 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 156 | spacerItem = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 157 | self.horizontalLayout_2.addItem(spacerItem) 158 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 159 | self.pushButton_4.setObjectName("pushButton_4") 160 | self.horizontalLayout_2.addWidget(self.pushButton_4) 161 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 162 | self.pushButton_5.setObjectName("pushButton_5") 163 | self.horizontalLayout_2.addWidget(self.pushButton_5) 164 | spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 165 | self.horizontalLayout_2.addItem(spacerItem1) 166 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_3) 167 | self.pushButton_6.setObjectName("pushButton_6") 168 | self.horizontalLayout_2.addWidget(self.pushButton_6) 169 | spacerItem2 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 170 | self.horizontalLayout_2.addItem(spacerItem2) 171 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 172 | self.verticalLayout.addWidget(self.frame_3) 173 | self.horizontalLayout.addWidget(self.frame) 174 | MainWindow.setCentralWidget(self.centralwidget) 175 | self.menubar = QtWidgets.QMenuBar(MainWindow) 176 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 177 | self.menubar.setObjectName("menubar") 178 | self.menu = QtWidgets.QMenu(self.menubar) 179 | self.menu.setObjectName("menu") 180 | self.menu_2 = QtWidgets.QMenu(self.menubar) 181 | self.menu_2.setObjectName("menu_2") 182 | self.menu_3 = QtWidgets.QMenu(self.menubar) 183 | self.menu_3.setObjectName("menu_3") 184 | MainWindow.setMenuBar(self.menubar) 185 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 186 | self.statusbar.setObjectName("statusbar") 187 | MainWindow.setStatusBar(self.statusbar) 188 | self.action = QtWidgets.QAction(MainWindow) 189 | self.action.setObjectName("action") 190 | self.action_2 = QtWidgets.QAction(MainWindow) 191 | self.action_2.setObjectName("action_2") 192 | self.action_3 = QtWidgets.QAction(MainWindow) 193 | self.action_3.setObjectName("action_3") 194 | self.action_4 = QtWidgets.QAction(MainWindow) 195 | self.action_4.setObjectName("action_4") 196 | self.menu.addAction(self.action) 197 | self.menu_2.addAction(self.action_4) 198 | self.menu_3.addAction(self.action_2) 199 | self.menu_3.addAction(self.action_3) 200 | self.menubar.addAction(self.menu.menuAction()) 201 | self.menubar.addAction(self.menu_2.menuAction()) 202 | self.menubar.addAction(self.menu_3.menuAction()) 203 | 204 | self.retranslateUi(MainWindow) 205 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 206 | 207 | def retranslateUi(self, MainWindow): 208 | _translate = QtCore.QCoreApplication.translate 209 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 210 | self.groupBox.setTitle(_translate("MainWindow", "猫眼电影详情")) 211 | self.label_1.setText(_translate("MainWindow", "电影名称:")) 212 | self.label_2.setText(_translate("MainWindow", "搜索规则:")) 213 | self.radioButton_1.setText(_translate("MainWindow", "单一电影评分测试")) 214 | self.radioButton_2.setText(_translate("MainWindow", "批量电影详情爬取")) 215 | self.label_6.setText(_translate("MainWindow", "导出文件:")) 216 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 217 | self.label.setText(_translate("MainWindow", "导入提示:")) 218 | self.textBrowser.setHtml(_translate("MainWindow", "\n" 219 | "\n" 222 | "

1.请确保文件后缀为(.xls),且文件能够打开

\n" 223 | "

2.程序将获取文件中第一个表格的第一列所有内容(包含标题)。请将需要搜索的电影名称全部移动到此区域内。

")) 224 | self.label_5.setText(_translate("MainWindow", "导入文件:")) 225 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 226 | self.pushButton_1.setText(_translate("MainWindow", "检查参数")) 227 | self.pushButton_2.setText(_translate("MainWindow", "清空参数")) 228 | self.pushButton_3.setText(_translate("MainWindow", "清空提示窗口")) 229 | self.pushButton_4.setText(_translate("MainWindow", "开始")) 230 | self.pushButton_5.setText(_translate("MainWindow", "中止")) 231 | self.pushButton_6.setText(_translate("MainWindow", "导出至Excel")) 232 | self.menu.setTitle(_translate("MainWindow", "数据库")) 233 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 234 | self.menu_3.setTitle(_translate("MainWindow", "关于")) 235 | self.action.setText(_translate("MainWindow", "连接数据库(待开发)")) 236 | self.action_2.setText(_translate("MainWindow", "版本")) 237 | self.action_3.setText(_translate("MainWindow", "制作人")) 238 | self.action_4.setText(_translate("MainWindow", "联系我们")) 239 | 240 | -------------------------------------------------------------------------------- /OGweather.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'weather.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 715) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(0) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(2) 32 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 33 | self.frame_4.setSizePolicy(sizePolicy) 34 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_4.setObjectName("frame_4") 37 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 38 | self.verticalLayout_5.setObjectName("verticalLayout_5") 39 | self.frame_6 = QtWidgets.QFrame(self.frame_4) 40 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 41 | sizePolicy.setHorizontalStretch(0) 42 | sizePolicy.setVerticalStretch(1) 43 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 44 | self.frame_6.setSizePolicy(sizePolicy) 45 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 46 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 47 | self.frame_6.setObjectName("frame_6") 48 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 49 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 50 | self.formLayout.setVerticalSpacing(20) 51 | self.formLayout.setObjectName("formLayout") 52 | self.label = QtWidgets.QLabel(self.frame_6) 53 | self.label.setObjectName("label") 54 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) 55 | self.verticalLayout_3 = QtWidgets.QVBoxLayout() 56 | self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) 57 | self.verticalLayout_3.setSpacing(10) 58 | self.verticalLayout_3.setObjectName("verticalLayout_3") 59 | self.radioButton = QtWidgets.QRadioButton(self.frame_6) 60 | self.radioButton.setObjectName("radioButton") 61 | self.verticalLayout_3.addWidget(self.radioButton) 62 | self.radioButton_2 = QtWidgets.QRadioButton(self.frame_6) 63 | self.radioButton_2.setObjectName("radioButton_2") 64 | self.verticalLayout_3.addWidget(self.radioButton_2) 65 | self.radioButton_3 = QtWidgets.QRadioButton(self.frame_6) 66 | self.radioButton_3.setObjectName("radioButton_3") 67 | self.verticalLayout_3.addWidget(self.radioButton_3) 68 | self.radioButton_4 = QtWidgets.QRadioButton(self.frame_6) 69 | self.radioButton_4.setObjectName("radioButton_4") 70 | self.verticalLayout_3.addWidget(self.radioButton_4) 71 | self.radioButton_5 = QtWidgets.QRadioButton(self.frame_6) 72 | self.radioButton_5.setObjectName("radioButton_5") 73 | self.verticalLayout_3.addWidget(self.radioButton_5) 74 | self.radioButton_6 = QtWidgets.QRadioButton(self.frame_6) 75 | self.radioButton_6.setObjectName("radioButton_6") 76 | self.verticalLayout_3.addWidget(self.radioButton_6) 77 | self.formLayout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.verticalLayout_3) 78 | self.label_2 = QtWidgets.QLabel(self.frame_6) 79 | self.label_2.setObjectName("label_2") 80 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 81 | self.horizontalLayout_5 = QtWidgets.QHBoxLayout() 82 | self.horizontalLayout_5.setObjectName("horizontalLayout_5") 83 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_6) 84 | self.pushButton_6.setObjectName("pushButton_6") 85 | self.horizontalLayout_5.addWidget(self.pushButton_6) 86 | self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_5) 87 | self.label_3 = QtWidgets.QLabel(self.frame_6) 88 | self.label_3.setObjectName("label_3") 89 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3) 90 | self.horizontalLayout_7 = QtWidgets.QHBoxLayout() 91 | self.horizontalLayout_7.setContentsMargins(5, 5, 5, 5) 92 | self.horizontalLayout_7.setSpacing(15) 93 | self.horizontalLayout_7.setObjectName("horizontalLayout_7") 94 | self.lineEdit_2 = QtWidgets.QLineEdit(self.frame_6) 95 | self.lineEdit_2.setObjectName("lineEdit_2") 96 | self.horizontalLayout_7.addWidget(self.lineEdit_2) 97 | self.formLayout.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_7) 98 | self.label_5 = QtWidgets.QLabel(self.frame_6) 99 | self.label_5.setObjectName("label_5") 100 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_5) 101 | self.horizontalLayout_8 = QtWidgets.QHBoxLayout() 102 | self.horizontalLayout_8.setContentsMargins(5, 5, 5, 5) 103 | self.horizontalLayout_8.setSpacing(15) 104 | self.horizontalLayout_8.setObjectName("horizontalLayout_8") 105 | self.lineEdit = QtWidgets.QLineEdit(self.frame_6) 106 | self.lineEdit.setObjectName("lineEdit") 107 | self.horizontalLayout_8.addWidget(self.lineEdit) 108 | self.formLayout.setLayout(3, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_8) 109 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 110 | self.pushButton_8.setObjectName("pushButton_8") 111 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 112 | self.label_8 = QtWidgets.QLabel(self.frame_6) 113 | self.label_8.setObjectName("label_8") 114 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_8) 115 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 116 | self.pushButton_9.setObjectName("pushButton_9") 117 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 118 | self.label_7 = QtWidgets.QLabel(self.frame_6) 119 | self.label_7.setObjectName("label_7") 120 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_7) 121 | self.verticalLayout_5.addWidget(self.frame_6) 122 | self.textBrowser_2 = QtWidgets.QTextBrowser(self.frame_4) 123 | self.textBrowser_2.setObjectName("textBrowser_2") 124 | self.verticalLayout_5.addWidget(self.textBrowser_2) 125 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 126 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 127 | self.pushButton = QtWidgets.QPushButton(self.frame_4) 128 | self.pushButton.setObjectName("pushButton") 129 | self.horizontalLayout_4.addWidget(self.pushButton) 130 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 131 | self.pushButton_2.setObjectName("pushButton_2") 132 | self.horizontalLayout_4.addWidget(self.pushButton_2) 133 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 134 | self.pushButton_3.setObjectName("pushButton_3") 135 | self.horizontalLayout_4.addWidget(self.pushButton_3) 136 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 137 | self.verticalLayout_4.addWidget(self.frame_4) 138 | self.horizontalLayout.addWidget(self.groupBox) 139 | self.frame = QtWidgets.QFrame(self.centralwidget) 140 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 141 | sizePolicy.setHorizontalStretch(3) 142 | sizePolicy.setVerticalStretch(0) 143 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 144 | self.frame.setSizePolicy(sizePolicy) 145 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 146 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 147 | self.frame.setObjectName("frame") 148 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 149 | self.verticalLayout.setObjectName("verticalLayout") 150 | self.frame_2 = QtWidgets.QFrame(self.frame) 151 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 152 | sizePolicy.setHorizontalStretch(0) 153 | sizePolicy.setVerticalStretch(2) 154 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 155 | self.frame_2.setSizePolicy(sizePolicy) 156 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 157 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 158 | self.frame_2.setObjectName("frame_2") 159 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 160 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 161 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_2) 162 | self.textBrowser_3.setObjectName("textBrowser_3") 163 | self.horizontalLayout_3.addWidget(self.textBrowser_3) 164 | self.verticalLayout.addWidget(self.frame_2) 165 | self.frame_3 = QtWidgets.QFrame(self.frame) 166 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 167 | sizePolicy.setHorizontalStretch(0) 168 | sizePolicy.setVerticalStretch(1) 169 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 170 | self.frame_3.setSizePolicy(sizePolicy) 171 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 172 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 173 | self.frame_3.setObjectName("frame_3") 174 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 175 | self.verticalLayout_2.setObjectName("verticalLayout_2") 176 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_3) 177 | self.textBrowser.setObjectName("textBrowser") 178 | self.verticalLayout_2.addWidget(self.textBrowser) 179 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 180 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 181 | spacerItem = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 182 | self.horizontalLayout_2.addItem(spacerItem) 183 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 184 | self.pushButton_4.setObjectName("pushButton_4") 185 | self.horizontalLayout_2.addWidget(self.pushButton_4) 186 | spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 187 | self.horizontalLayout_2.addItem(spacerItem1) 188 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 189 | self.pushButton_5.setObjectName("pushButton_5") 190 | self.horizontalLayout_2.addWidget(self.pushButton_5) 191 | spacerItem2 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 192 | self.horizontalLayout_2.addItem(spacerItem2) 193 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 194 | self.verticalLayout.addWidget(self.frame_3) 195 | self.horizontalLayout.addWidget(self.frame) 196 | MainWindow.setCentralWidget(self.centralwidget) 197 | self.menubar = QtWidgets.QMenuBar(MainWindow) 198 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 199 | self.menubar.setObjectName("menubar") 200 | MainWindow.setMenuBar(self.menubar) 201 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 202 | self.statusbar.setObjectName("statusbar") 203 | MainWindow.setStatusBar(self.statusbar) 204 | 205 | self.retranslateUi(MainWindow) 206 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 207 | 208 | def retranslateUi(self, MainWindow): 209 | _translate = QtCore.QCoreApplication.translate 210 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 211 | self.groupBox.setTitle(_translate("MainWindow", "中国天气网")) 212 | self.label.setText(_translate("MainWindow", "选择功能:")) 213 | self.radioButton.setText(_translate("MainWindow", "查询单独城市实时天气")) 214 | self.radioButton_2.setText(_translate("MainWindow", "查询并且导出批量城市实时天气")) 215 | self.radioButton_3.setText(_translate("MainWindow", "查询单独城市每日整点天气")) 216 | self.radioButton_4.setText(_translate("MainWindow", "查询并且导出批量城市整点天气")) 217 | self.radioButton_5.setText(_translate("MainWindow", "查询并且导出单独城市40天的天气")) 218 | self.radioButton_6.setText(_translate("MainWindow", "查询并且导出批量城市40天的天气")) 219 | self.label_2.setText(_translate("MainWindow", "城市总览:")) 220 | self.pushButton_6.setText(_translate("MainWindow", "查看")) 221 | self.label_3.setText(_translate("MainWindow", "搜索城市:")) 222 | self.label_5.setText(_translate("MainWindow", "批量搜索:")) 223 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 224 | self.label_8.setText(_translate("MainWindow", "导出文件:")) 225 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 226 | self.label_7.setText(_translate("MainWindow", "导入文件:")) 227 | self.pushButton.setText(_translate("MainWindow", "锁定")) 228 | self.pushButton_2.setText(_translate("MainWindow", "开始")) 229 | self.pushButton_3.setText(_translate("MainWindow", "中止")) 230 | self.pushButton_4.setText(_translate("MainWindow", "清除")) 231 | self.pushButton_5.setText(_translate("MainWindow", "返回")) 232 | 233 | -------------------------------------------------------------------------------- /OGweibohuati.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OGweibohuati.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 714) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(2) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_6 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(1) 32 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 33 | self.frame_6.setSizePolicy(sizePolicy) 34 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_6.setObjectName("frame_6") 37 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 38 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 39 | self.formLayout.setVerticalSpacing(20) 40 | self.formLayout.setObjectName("formLayout") 41 | self.label_1 = QtWidgets.QLabel(self.frame_6) 42 | self.label_1.setObjectName("label_1") 43 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_1) 44 | self.lineEdit_1 = QtWidgets.QLineEdit(self.frame_6) 45 | self.lineEdit_1.setObjectName("lineEdit_1") 46 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_1) 47 | self.label_2 = QtWidgets.QLabel(self.frame_6) 48 | self.label_2.setObjectName("label_2") 49 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 50 | self.verticalLayout_3 = QtWidgets.QVBoxLayout() 51 | self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) 52 | self.verticalLayout_3.setSpacing(10) 53 | self.verticalLayout_3.setObjectName("verticalLayout_3") 54 | self.radioButton_1 = QtWidgets.QRadioButton(self.frame_6) 55 | self.radioButton_1.setObjectName("radioButton_1") 56 | self.verticalLayout_3.addWidget(self.radioButton_1) 57 | self.radioButton_2 = QtWidgets.QRadioButton(self.frame_6) 58 | self.radioButton_2.setObjectName("radioButton_2") 59 | self.verticalLayout_3.addWidget(self.radioButton_2) 60 | self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.verticalLayout_3) 61 | self.label_6 = QtWidgets.QLabel(self.frame_6) 62 | self.label_6.setObjectName("label_6") 63 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_6) 64 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 65 | self.pushButton_9.setObjectName("pushButton_9") 66 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 67 | self.label = QtWidgets.QLabel(self.frame_6) 68 | self.label.setObjectName("label") 69 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label) 70 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_6) 71 | self.textBrowser.setEnabled(True) 72 | self.textBrowser.setObjectName("textBrowser") 73 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.textBrowser) 74 | self.label_5 = QtWidgets.QLabel(self.frame_6) 75 | self.label_5.setObjectName("label_5") 76 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_5) 77 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 78 | self.pushButton_8.setObjectName("pushButton_8") 79 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 80 | self.verticalLayout_4.addWidget(self.frame_6) 81 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 82 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 83 | sizePolicy.setHorizontalStretch(0) 84 | sizePolicy.setVerticalStretch(2) 85 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 86 | self.frame_4.setSizePolicy(sizePolicy) 87 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 88 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 89 | self.frame_4.setObjectName("frame_4") 90 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 91 | self.verticalLayout_5.setObjectName("verticalLayout_5") 92 | self.textBrowser_1 = QtWidgets.QTextBrowser(self.frame_4) 93 | self.textBrowser_1.setObjectName("textBrowser_1") 94 | self.verticalLayout_5.addWidget(self.textBrowser_1) 95 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 96 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 97 | self.pushButton_1 = QtWidgets.QPushButton(self.frame_4) 98 | self.pushButton_1.setObjectName("pushButton_1") 99 | self.horizontalLayout_4.addWidget(self.pushButton_1) 100 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 101 | self.pushButton_2.setObjectName("pushButton_2") 102 | self.horizontalLayout_4.addWidget(self.pushButton_2) 103 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 104 | self.pushButton_3.setObjectName("pushButton_3") 105 | self.horizontalLayout_4.addWidget(self.pushButton_3) 106 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 107 | self.verticalLayout_4.addWidget(self.frame_4) 108 | self.horizontalLayout.addWidget(self.groupBox) 109 | self.frame = QtWidgets.QFrame(self.centralwidget) 110 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 111 | sizePolicy.setHorizontalStretch(5) 112 | sizePolicy.setVerticalStretch(0) 113 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 114 | self.frame.setSizePolicy(sizePolicy) 115 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 116 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 117 | self.frame.setObjectName("frame") 118 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 119 | self.verticalLayout.setObjectName("verticalLayout") 120 | self.frame_2 = QtWidgets.QFrame(self.frame) 121 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 122 | sizePolicy.setHorizontalStretch(0) 123 | sizePolicy.setVerticalStretch(2) 124 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 125 | self.frame_2.setSizePolicy(sizePolicy) 126 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 127 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 128 | self.frame_2.setObjectName("frame_2") 129 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 130 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 131 | # self.tableView = QtWidgets.QTableView(self.frame_2) 132 | # self.tableView.setObjectName("tableView") 133 | # self.horizontalLayout_3.addWidget(self.tableView) 134 | self.verticalLayout.addWidget(self.frame_2) 135 | self.line = QtWidgets.QFrame(self.frame) 136 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 137 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 138 | self.line.setObjectName("line") 139 | self.verticalLayout.addWidget(self.line) 140 | self.frame_3 = QtWidgets.QFrame(self.frame) 141 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 142 | sizePolicy.setHorizontalStretch(0) 143 | sizePolicy.setVerticalStretch(1) 144 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 145 | self.frame_3.setSizePolicy(sizePolicy) 146 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 147 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 148 | self.frame_3.setObjectName("frame_3") 149 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 150 | self.verticalLayout_2.setObjectName("verticalLayout_2") 151 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_3) 152 | self.textBrowser_3.setObjectName("textBrowser_3") 153 | self.verticalLayout_2.addWidget(self.textBrowser_3) 154 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 155 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 156 | spacerItem = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 157 | self.horizontalLayout_2.addItem(spacerItem) 158 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 159 | self.pushButton_4.setObjectName("pushButton_4") 160 | self.horizontalLayout_2.addWidget(self.pushButton_4) 161 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 162 | self.pushButton_5.setObjectName("pushButton_5") 163 | self.horizontalLayout_2.addWidget(self.pushButton_5) 164 | spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 165 | self.horizontalLayout_2.addItem(spacerItem1) 166 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_3) 167 | self.pushButton_6.setObjectName("pushButton_6") 168 | self.horizontalLayout_2.addWidget(self.pushButton_6) 169 | spacerItem2 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 170 | self.horizontalLayout_2.addItem(spacerItem2) 171 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 172 | self.verticalLayout.addWidget(self.frame_3) 173 | self.horizontalLayout.addWidget(self.frame) 174 | MainWindow.setCentralWidget(self.centralwidget) 175 | self.menubar = QtWidgets.QMenuBar(MainWindow) 176 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 177 | self.menubar.setObjectName("menubar") 178 | self.menu = QtWidgets.QMenu(self.menubar) 179 | self.menu.setObjectName("menu") 180 | self.menu_2 = QtWidgets.QMenu(self.menubar) 181 | self.menu_2.setObjectName("menu_2") 182 | self.menu_3 = QtWidgets.QMenu(self.menubar) 183 | self.menu_3.setObjectName("menu_3") 184 | MainWindow.setMenuBar(self.menubar) 185 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 186 | self.statusbar.setObjectName("statusbar") 187 | MainWindow.setStatusBar(self.statusbar) 188 | self.action = QtWidgets.QAction(MainWindow) 189 | self.action.setObjectName("action") 190 | self.action_2 = QtWidgets.QAction(MainWindow) 191 | self.action_2.setObjectName("action_2") 192 | self.action_3 = QtWidgets.QAction(MainWindow) 193 | self.action_3.setObjectName("action_3") 194 | self.action_4 = QtWidgets.QAction(MainWindow) 195 | self.action_4.setObjectName("action_4") 196 | self.menu.addAction(self.action) 197 | self.menu_2.addAction(self.action_4) 198 | self.menu_3.addAction(self.action_2) 199 | self.menu_3.addAction(self.action_3) 200 | self.menubar.addAction(self.menu.menuAction()) 201 | self.menubar.addAction(self.menu_2.menuAction()) 202 | self.menubar.addAction(self.menu_3.menuAction()) 203 | 204 | self.retranslateUi(MainWindow) 205 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 206 | 207 | def retranslateUi(self, MainWindow): 208 | _translate = QtCore.QCoreApplication.translate 209 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 210 | self.groupBox.setTitle(_translate("MainWindow", "微博话题")) 211 | self.label_1.setText(_translate("MainWindow", "话题名称:")) 212 | self.label_2.setText(_translate("MainWindow", "搜索规则:")) 213 | self.radioButton_1.setText(_translate("MainWindow", "单一微博话题测试")) 214 | self.radioButton_2.setText(_translate("MainWindow", "批量微博话题爬取")) 215 | self.label_6.setText(_translate("MainWindow", "导出文件:")) 216 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 217 | self.label.setText(_translate("MainWindow", "导入提示:")) 218 | self.textBrowser.setHtml(_translate("MainWindow", "\n" 219 | "\n" 222 | "

1.请确保文件后缀为(.xls),且文件能够打开

\n" 223 | "

2.此程序需要多次访问微博。频繁,高频访问将被微博拉黑,本程序间隔3秒访问一次,请耐心等待

\n" 224 | "

3.程序将获取文件中第一个表格的第一列所有内容(包含标题)。请将需要搜索的话题全部移动到此区域内。

")) 225 | self.label_5.setText(_translate("MainWindow", "导入文件:")) 226 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 227 | self.pushButton_1.setText(_translate("MainWindow", "检查参数")) 228 | self.pushButton_2.setText(_translate("MainWindow", "清空参数")) 229 | self.pushButton_3.setText(_translate("MainWindow", "清空提示窗口")) 230 | self.pushButton_4.setText(_translate("MainWindow", "开始")) 231 | self.pushButton_5.setText(_translate("MainWindow", "中止")) 232 | self.pushButton_6.setText(_translate("MainWindow", "导出至Excel")) 233 | self.menu.setTitle(_translate("MainWindow", "数据库")) 234 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 235 | self.menu_3.setTitle(_translate("MainWindow", "关于")) 236 | self.action.setText(_translate("MainWindow", "连接数据库(待开发)")) 237 | self.action_2.setText(_translate("MainWindow", "版本")) 238 | self.action_3.setText(_translate("MainWindow", "制作人")) 239 | self.action_4.setText(_translate("MainWindow", "联系我们")) 240 | 241 | -------------------------------------------------------------------------------- /OGzhongguo.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'OGzhongguotianqiwang.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_MainWindow(object): 12 | def setupUi(self, MainWindow): 13 | MainWindow.setObjectName("MainWindow") 14 | MainWindow.resize(1041, 714) 15 | self.centralwidget = QtWidgets.QWidget(MainWindow) 16 | self.centralwidget.setObjectName("centralwidget") 17 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) 18 | self.horizontalLayout.setObjectName("horizontalLayout") 19 | self.groupBox = QtWidgets.QGroupBox(self.centralwidget) 20 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 21 | sizePolicy.setHorizontalStretch(2) 22 | sizePolicy.setVerticalStretch(5) 23 | sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) 24 | self.groupBox.setSizePolicy(sizePolicy) 25 | self.groupBox.setObjectName("groupBox") 26 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox) 27 | self.verticalLayout_4.setObjectName("verticalLayout_4") 28 | self.frame_6 = QtWidgets.QFrame(self.groupBox) 29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 30 | sizePolicy.setHorizontalStretch(0) 31 | sizePolicy.setVerticalStretch(1) 32 | sizePolicy.setHeightForWidth(self.frame_6.sizePolicy().hasHeightForWidth()) 33 | self.frame_6.setSizePolicy(sizePolicy) 34 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) 35 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) 36 | self.frame_6.setObjectName("frame_6") 37 | self.formLayout = QtWidgets.QFormLayout(self.frame_6) 38 | self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) 39 | self.formLayout.setVerticalSpacing(20) 40 | self.formLayout.setObjectName("formLayout") 41 | self.label_1 = QtWidgets.QLabel(self.frame_6) 42 | self.label_1.setObjectName("label_1") 43 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_1) 44 | self.lineEdit_1 = QtWidgets.QLineEdit(self.frame_6) 45 | self.lineEdit_1.setObjectName("lineEdit_1") 46 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_1) 47 | self.label_2 = QtWidgets.QLabel(self.frame_6) 48 | self.label_2.setObjectName("label_2") 49 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2) 50 | self.verticalLayout_3 = QtWidgets.QVBoxLayout() 51 | self.verticalLayout_3.setContentsMargins(5, 5, 5, 5) 52 | self.verticalLayout_3.setSpacing(10) 53 | self.verticalLayout_3.setObjectName("verticalLayout_3") 54 | self.radioButton_1 = QtWidgets.QRadioButton(self.frame_6) 55 | self.radioButton_1.setObjectName("radioButton_1") 56 | self.verticalLayout_3.addWidget(self.radioButton_1) 57 | self.radioButton_2 = QtWidgets.QRadioButton(self.frame_6) 58 | self.radioButton_2.setObjectName("radioButton_2") 59 | self.verticalLayout_3.addWidget(self.radioButton_2) 60 | self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.verticalLayout_3) 61 | self.label_6 = QtWidgets.QLabel(self.frame_6) 62 | self.label_6.setObjectName("label_6") 63 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_6) 64 | self.pushButton_9 = QtWidgets.QPushButton(self.frame_6) 65 | self.pushButton_9.setObjectName("pushButton_9") 66 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.pushButton_9) 67 | self.label = QtWidgets.QLabel(self.frame_6) 68 | self.label.setObjectName("label") 69 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label) 70 | self.textBrowser = QtWidgets.QTextBrowser(self.frame_6) 71 | self.textBrowser.setEnabled(True) 72 | self.textBrowser.setObjectName("textBrowser") 73 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.textBrowser) 74 | self.label_5 = QtWidgets.QLabel(self.frame_6) 75 | self.label_5.setObjectName("label_5") 76 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_5) 77 | self.pushButton_8 = QtWidgets.QPushButton(self.frame_6) 78 | self.pushButton_8.setObjectName("pushButton_8") 79 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.pushButton_8) 80 | self.verticalLayout_4.addWidget(self.frame_6) 81 | self.frame_4 = QtWidgets.QFrame(self.groupBox) 82 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 83 | sizePolicy.setHorizontalStretch(0) 84 | sizePolicy.setVerticalStretch(2) 85 | sizePolicy.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) 86 | self.frame_4.setSizePolicy(sizePolicy) 87 | self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) 88 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) 89 | self.frame_4.setObjectName("frame_4") 90 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_4) 91 | self.verticalLayout_5.setObjectName("verticalLayout_5") 92 | self.textBrowser_1 = QtWidgets.QTextBrowser(self.frame_4) 93 | self.textBrowser_1.setObjectName("textBrowser_1") 94 | self.verticalLayout_5.addWidget(self.textBrowser_1) 95 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 96 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 97 | self.pushButton_1 = QtWidgets.QPushButton(self.frame_4) 98 | self.pushButton_1.setObjectName("pushButton_1") 99 | self.horizontalLayout_4.addWidget(self.pushButton_1) 100 | self.pushButton_2 = QtWidgets.QPushButton(self.frame_4) 101 | self.pushButton_2.setObjectName("pushButton_2") 102 | self.horizontalLayout_4.addWidget(self.pushButton_2) 103 | self.pushButton_3 = QtWidgets.QPushButton(self.frame_4) 104 | self.pushButton_3.setObjectName("pushButton_3") 105 | self.horizontalLayout_4.addWidget(self.pushButton_3) 106 | self.verticalLayout_5.addLayout(self.horizontalLayout_4) 107 | self.verticalLayout_4.addWidget(self.frame_4) 108 | self.horizontalLayout.addWidget(self.groupBox) 109 | self.frame = QtWidgets.QFrame(self.centralwidget) 110 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 111 | sizePolicy.setHorizontalStretch(5) 112 | sizePolicy.setVerticalStretch(0) 113 | sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) 114 | self.frame.setSizePolicy(sizePolicy) 115 | self.frame.setFrameShape(QtWidgets.QFrame.Box) 116 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised) 117 | self.frame.setObjectName("frame") 118 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) 119 | self.verticalLayout.setObjectName("verticalLayout") 120 | self.frame_2 = QtWidgets.QFrame(self.frame) 121 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 122 | sizePolicy.setHorizontalStretch(0) 123 | sizePolicy.setVerticalStretch(2) 124 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 125 | self.frame_2.setSizePolicy(sizePolicy) 126 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) 127 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) 128 | self.frame_2.setObjectName("frame_2") 129 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2) 130 | self.horizontalLayout_3.setObjectName("horizontalLayout_3") 131 | # self.tableView = QtWidgets.QTableView(self.frame_2) 132 | # self.tableView.setObjectName("tableView") 133 | # self.horizontalLayout_3.addWidget(self.tableView) 134 | self.verticalLayout.addWidget(self.frame_2) 135 | self.line = QtWidgets.QFrame(self.frame) 136 | self.line.setFrameShape(QtWidgets.QFrame.HLine) 137 | self.line.setFrameShadow(QtWidgets.QFrame.Sunken) 138 | self.line.setObjectName("line") 139 | self.verticalLayout.addWidget(self.line) 140 | self.frame_3 = QtWidgets.QFrame(self.frame) 141 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) 142 | sizePolicy.setHorizontalStretch(0) 143 | sizePolicy.setVerticalStretch(1) 144 | sizePolicy.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) 145 | self.frame_3.setSizePolicy(sizePolicy) 146 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) 147 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) 148 | self.frame_3.setObjectName("frame_3") 149 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_3) 150 | self.verticalLayout_2.setObjectName("verticalLayout_2") 151 | self.textBrowser_3 = QtWidgets.QTextBrowser(self.frame_3) 152 | self.textBrowser_3.setObjectName("textBrowser_3") 153 | self.verticalLayout_2.addWidget(self.textBrowser_3) 154 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 155 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 156 | spacerItem = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 157 | self.horizontalLayout_2.addItem(spacerItem) 158 | self.pushButton_4 = QtWidgets.QPushButton(self.frame_3) 159 | self.pushButton_4.setObjectName("pushButton_4") 160 | self.horizontalLayout_2.addWidget(self.pushButton_4) 161 | self.pushButton_5 = QtWidgets.QPushButton(self.frame_3) 162 | self.pushButton_5.setObjectName("pushButton_5") 163 | self.horizontalLayout_2.addWidget(self.pushButton_5) 164 | spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 165 | self.horizontalLayout_2.addItem(spacerItem1) 166 | self.pushButton_6 = QtWidgets.QPushButton(self.frame_3) 167 | self.pushButton_6.setObjectName("pushButton_6") 168 | self.horizontalLayout_2.addWidget(self.pushButton_6) 169 | self.pushButton = QtWidgets.QPushButton(self.frame_3) 170 | self.pushButton.setObjectName("pushButton") 171 | self.horizontalLayout_2.addWidget(self.pushButton) 172 | spacerItem2 = QtWidgets.QSpacerItem(168, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 173 | self.horizontalLayout_2.addItem(spacerItem2) 174 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 175 | self.verticalLayout.addWidget(self.frame_3) 176 | self.horizontalLayout.addWidget(self.frame) 177 | MainWindow.setCentralWidget(self.centralwidget) 178 | self.menubar = QtWidgets.QMenuBar(MainWindow) 179 | self.menubar.setGeometry(QtCore.QRect(0, 0, 1041, 26)) 180 | self.menubar.setObjectName("menubar") 181 | self.menu = QtWidgets.QMenu(self.menubar) 182 | self.menu.setObjectName("menu") 183 | self.menu_2 = QtWidgets.QMenu(self.menubar) 184 | self.menu_2.setObjectName("menu_2") 185 | self.menu_3 = QtWidgets.QMenu(self.menubar) 186 | self.menu_3.setObjectName("menu_3") 187 | MainWindow.setMenuBar(self.menubar) 188 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 189 | self.statusbar.setObjectName("statusbar") 190 | MainWindow.setStatusBar(self.statusbar) 191 | self.action = QtWidgets.QAction(MainWindow) 192 | self.action.setObjectName("action") 193 | self.action_2 = QtWidgets.QAction(MainWindow) 194 | self.action_2.setObjectName("action_2") 195 | self.action_3 = QtWidgets.QAction(MainWindow) 196 | self.action_3.setObjectName("action_3") 197 | self.action_4 = QtWidgets.QAction(MainWindow) 198 | self.action_4.setObjectName("action_4") 199 | self.menu.addAction(self.action) 200 | self.menu_2.addAction(self.action_4) 201 | self.menu_3.addAction(self.action_2) 202 | self.menu_3.addAction(self.action_3) 203 | self.menubar.addAction(self.menu.menuAction()) 204 | self.menubar.addAction(self.menu_2.menuAction()) 205 | self.menubar.addAction(self.menu_3.menuAction()) 206 | 207 | self.retranslateUi(MainWindow) 208 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 209 | 210 | def retranslateUi(self, MainWindow): 211 | _translate = QtCore.QCoreApplication.translate 212 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 213 | self.groupBox.setTitle(_translate("MainWindow", "中国天气网国内实时天气")) 214 | self.label_1.setText(_translate("MainWindow", "城市名称:")) 215 | self.label_2.setText(_translate("MainWindow", "搜索规则:")) 216 | self.radioButton_1.setText(_translate("MainWindow", "实时天气查询测试")) 217 | self.radioButton_2.setText(_translate("MainWindow", "批量城市实时天气爬取")) 218 | self.label_6.setText(_translate("MainWindow", "导出文件:")) 219 | self.pushButton_9.setText(_translate("MainWindow", "点击选择")) 220 | self.label.setText(_translate("MainWindow", "提示:")) 221 | self.textBrowser.setHtml(_translate("MainWindow", "\n" 222 | "\n" 225 | "

1.请确保文件后缀为(.xls),且文件能够打开

\n" 226 | "

2.程序将获取文件中第一个表格的第一列所有内容(包含标题)。请将需要搜索的城市全部移动到此区域内。

\n" 227 | "

3.部分城市可能本程序,或原网站未收录,无法查询

\n" 228 | "

4.本程序无法查询省份,如四川,广州等

")) 229 | self.label_5.setText(_translate("MainWindow", "导入文件:")) 230 | self.pushButton_8.setText(_translate("MainWindow", "点击选择")) 231 | self.pushButton_1.setText(_translate("MainWindow", "检查参数")) 232 | self.pushButton_2.setText(_translate("MainWindow", "清空参数")) 233 | self.pushButton_3.setText(_translate("MainWindow", "清空提示窗口")) 234 | self.pushButton_4.setText(_translate("MainWindow", "开始")) 235 | self.pushButton_5.setText(_translate("MainWindow", "中止")) 236 | self.pushButton_6.setText(_translate("MainWindow", "导出至Excel")) 237 | self.pushButton.setText(_translate("MainWindow", "导出所有城市名称")) 238 | self.menu.setTitle(_translate("MainWindow", "数据库")) 239 | self.menu_2.setTitle(_translate("MainWindow", "帮助")) 240 | self.menu_3.setTitle(_translate("MainWindow", "关于")) 241 | self.action.setText(_translate("MainWindow", "连接数据库(待开发)")) 242 | self.action_2.setText(_translate("MainWindow", "版本")) 243 | self.action_3.setText(_translate("MainWindow", "制作人")) 244 | self.action_4.setText(_translate("MainWindow", "联系我们")) 245 | 246 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 利用Python编写爬虫程序,并利用PyQt5制作UI界面,让爬虫程序能傻瓜式操作。 2 | 3 | 目前编写的网址有["美团", "京东", "微博榜单", "微博话题", "中国天气网", "太平洋汽车", "猫眼评分", 4 | "B站视频", "B站视频弹幕", "B站番剧弹幕", "央视新闻", "网易新闻", "B站评论", "无忧招聘网"] 5 | 6 | 前缀OG的为每个程序的pyqt5界面程序,不可运行,其他每个程序均可单独运行。 7 | 8 | 编写了主窗口程序 "calltest" 可以调用其他所有爬虫程序。即调用calltest可以执行所有爬虫功能。 9 | -------------------------------------------------------------------------------- /calltest.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | from PyQt5.QtGui import * 5 | from PyQt5.QtWidgets import * 6 | from OG import Ui_MainWindow 7 | from PyQt5.QtCore import * 8 | from PyQt5 import QtCore, QtGui, QtWidgets 9 | import time 10 | import os 11 | import requests 12 | 13 | 14 | class MainWin(QMainWindow, Ui_MainWindow): 15 | 16 | def __init__(self, parent=None): 17 | super(MainWin, self).__init__(parent) 18 | self.setupUi(self) 19 | self.initUI() 20 | 21 | 22 | def initUI(self): 23 | self.textBrowser.append("欢迎使用本软件") 24 | self.treeWidget.clicked.connect(self.onTreeClicked) 25 | self.pushButton.clicked.connect(self.open_ck) 26 | self.pushButton_2.clicked.connect(self.close) 27 | 28 | filename = "说明.txt" 29 | pf = open(filename, "r", encoding='UTF-8') 30 | a = pf.read() 31 | self.textBrowser_2.setPlainText(a) 32 | self.selected = False 33 | 34 | self.setWindowTitle("欢迎使用") 35 | 36 | try: 37 | ip = requests.get("http://icanhazip.com/", timeout=2) 38 | self.textBrowser.append("\r您的网络通畅,当前ip地址为:" + ip.text) 39 | except: 40 | self.textBrowser.append("\r请注意:您未连接网络或网络卡顿,未连接网络将无法使用此软件。") 41 | 42 | def onTreeClicked(self): 43 | item = self.treeWidget.currentItem() 44 | self.name = item.text(0) 45 | 46 | b = ["美团", "京东", "微博榜单", "微博话题", "中国天气网", "太平洋汽车", "猫眼评分", 47 | "B站视频", "B站视频弹幕", "B站番剧弹幕", "央视新闻", "网易新闻", "B站评论", "无忧招聘网"] 48 | if self.name in b: 49 | filename = "%s.txt" % self.name 50 | pf = open(filename, "r", encoding='UTF-8') 51 | a = pf.read() 52 | self.textBrowser_2.setPlainText(a) 53 | self.selected = True 54 | else: 55 | filename = "说明.txt" 56 | pf = open(filename, "r", encoding='UTF-8') 57 | a = pf.read() 58 | self.textBrowser_2.setPlainText(a) 59 | self.selected = False 60 | 61 | def open_ck(self): 62 | if self.selected == True: 63 | if self.name == "网易新闻": 64 | from 网易新闻 import ChildWindow 65 | elif self.name == "央视新闻": 66 | from 央视新闻 import ChildWindow 67 | elif self.name == "猫眼评分": 68 | from maoyanpingfen import ChildWindow 69 | elif self.name == "美团": 70 | from meituan import ChildWindow 71 | elif self.name == "京东": 72 | from jingdong import ChildWindow 73 | elif self.name == "微博榜单": 74 | from weibobangdan import ChildWindow 75 | elif self.name == "微博话题": 76 | from weibohuati import ChildWindow 77 | elif self.name == "中国天气网": 78 | from zhongguo import ChildWindow 79 | elif self.name == "太平洋汽车": 80 | from taipingyang import ChildWindow 81 | elif self.name == "B站视频": 82 | from bilibili import ChildWindow 83 | elif self.name == "B站视频弹幕": 84 | from shipindanmu import ChildWindow 85 | elif self.name == "B站番剧弹幕": 86 | from fanjudanmu import ChildWindow 87 | elif self.name == "B站评论": 88 | from bilibili评论 import ChildWindow 89 | elif self.name == "无忧招聘网": 90 | from 无忧网 import ChildWindow 91 | 92 | 93 | self.xxxx = ChildWindow() 94 | self.xxxx.close_singnal.connect(self.lianjie) 95 | form.close() 96 | self.xxxx.show() 97 | else: 98 | self.textBrowser.append("\r请选择您需要的功能。") 99 | 100 | def lianjie(self): 101 | form.show() 102 | 103 | 104 | 105 | 106 | if __name__ == "__main__": 107 | app = QApplication(sys.argv) 108 | form = MainWin() 109 | form.show() 110 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /meituan.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | import re 5 | from PyQt5.QtCore import * 6 | from PyQt5.QtGui import * 7 | from PyQt5.QtWidgets import * 8 | from OGmeituan import Ui_MainWindow 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | import requests 11 | from lxml import etree 12 | import xlwt 13 | 14 | class ChildWindow(QMainWindow, Ui_MainWindow): 15 | close_singnal = pyqtSignal(str) 16 | 17 | def __init__(self, parent=None): 18 | super(ChildWindow, self).__init__(parent) 19 | self.setupUi(self) 20 | self.initUI() 21 | 22 | self.thread = MyThread() 23 | self.thread.result_thread.connect(self.showtable) 24 | self.thread.error_thread.connect(self.showerror) 25 | self.thread.state_thread.connect(self.not_click) 26 | 27 | 28 | def closeEvent(self, event): 29 | """ 30 | 对MainWindow的函数closeEvent进行重构 31 | 退出软件时结束所有进程 32 | :param event: 33 | :return: 34 | """ 35 | reply = QtWidgets.QMessageBox.question(self, 36 | '确认', 37 | "程序爬取的内容需要右下角手动保存!!\n是否确认退出?", 38 | QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, 39 | QtWidgets.QMessageBox.No) 40 | if reply == QtWidgets.QMessageBox.Yes: 41 | event.accept() 42 | self.thread.stop_thread() 43 | self.close_singnal.emit("sayasora") 44 | else: 45 | event.ignore() 46 | 47 | 48 | def initUI(self): 49 | #子窗口名字修改 50 | self.setWindowTitle("欢迎使用美团美食的爬取程序") 51 | #子窗口最大化 52 | self.showMaximized() 53 | self.textBrowser_3.append("欢迎使用美团美食的爬取程序,请设置爬虫参数\r") 54 | 55 | # 设置表格 56 | self.model = QStandardItemModel(0, 10) 57 | # 设置水平方向十个头标签文本内容 58 | self.model.setHorizontalHeaderLabels( 59 | ['页码', '个数', '店名', '店铺编号', '评分', '评论数', '地址', '人均消费', '是否为广告', '商品图片'] 60 | ) 61 | 62 | self.tableView = QtWidgets.QTableView(self.frame_2) 63 | self.tableView.setObjectName("tableView") 64 | self.tableView.setModel(self.model) 65 | self.horizontalLayout_3.addWidget(self.tableView) 66 | 67 | #本程序不需要导入数据 68 | self.pushButton_8.setEnabled(False) 69 | 70 | #定义接口数据 71 | self.interface_data = [] 72 | self.interface_data_state = True 73 | self.pushButton_1.clicked.connect(lambda: self.check_data()) 74 | 75 | #更改swichbtn状态 76 | self.select_btn = 1 77 | self.select_btn_translate = "综合默认" 78 | self.radioButton_1.setChecked(True) 79 | self.radioButton_1.clicked.connect(lambda: self.selectbtn(1)) 80 | self.radioButton_2.clicked.connect(lambda: self.selectbtn(2)) 81 | self.radioButton_3.clicked.connect(lambda: self.selectbtn(3)) 82 | 83 | #价格 页码可输入范围 84 | self.spinBox_3.setRange(1, 67) 85 | self.spinBox_4.setRange(1, 67) 86 | 87 | #创建导入导出文件位置 88 | self.in_address = "" 89 | self.out_address = "" 90 | self.pushButton_8.clicked.connect(self.getfile) 91 | self.pushButton_9.clicked.connect(self.savefile) 92 | 93 | #设置开始按钮 94 | self.pushButton_4.setEnabled(False) 95 | self.pushButton_4.clicked.connect(self.start_btn) 96 | 97 | #设置中止按钮 98 | self.pushButton_5.setEnabled(False) 99 | self.pushButton_5.clicked.connect(self.main_stop_thread) 100 | 101 | #设置清空参数按钮 102 | self.pushButton_2.clicked.connect(self.clean_frame_6) 103 | 104 | #设置清除提示窗口 105 | self.pushButton_3.clicked.connect(self.clean_textBrowser_3) 106 | 107 | #数据保存按钮,保存为excel 108 | self.pushButton_6.setEnabled(False) 109 | self.pushButton_6.clicked.connect(self.save_excel) 110 | 111 | 112 | #选择商品排序槽函数 113 | def selectbtn(self, i): 114 | self.select_btn = i 115 | #翻译按钮 116 | self.translate_radio(i) 117 | 118 | #导入文件按钮槽函数 119 | def getfile(self): 120 | a = QFileDialog.getOpenFileName(self, '请选择要打开的文件', 'c:\\', "Data files (*.xlsx *.xls *.csv)") 121 | self.pushButton_8.setText(a[0]) 122 | self.in_address = a[0] 123 | 124 | #导出文件按钮槽函数 125 | def savefile(self): 126 | a = QFileDialog.getSaveFileName(self, '请选择要保存的位置', 'c:\\', "Data files (*.xls)") 127 | self.pushButton_9.setText(a[0]) 128 | self.out_address = a[0] 129 | 130 | #状态选择翻译 131 | def translate_radio(self, i): 132 | a = {"1": "默认排序", "2": "销量最多", "3": "好评最多"} 133 | self.select_btn_translate = a[str(i)] 134 | 135 | #清空参数函数 136 | def clean_frame_6(self): 137 | self.comboBox_3.setCurrentIndex(0) 138 | self.comboBox_4.setCurrentIndex(0) 139 | self.comboBox_5.setCurrentIndex(0) 140 | self.spinBox_3.setValue(1) 141 | self.spinBox_4.setValue(1) 142 | self.pushButton_9.setText("点击选择") 143 | self.out_address = '' 144 | 145 | self.textBrowser_3.append("已成功清除参数\r") 146 | 147 | #清除提示窗口函数 148 | def clean_textBrowser_3(self): 149 | self.textBrowser_3.clear() 150 | 151 | #检查按钮对应槽函数 152 | def check_data(self): 153 | if self.pushButton_1.text() == "取消": 154 | self.frame_6.setEnabled(True) 155 | self.pushButton_1.setText("检查参数") 156 | self.pushButton_4.setEnabled(False) 157 | self.pushButton_2.setEnabled(True) 158 | self.textBrowser_3.append("请重新输入需要修改的参数\r") 159 | else: 160 | self.interface_data = [self.comboBox_3.currentText(), self.select_btn, self.comboBox_4.currentText(), self.comboBox_5.currentText(), self.spinBox_3.text(), self.spinBox_4.text(), self.in_address, self.out_address] 161 | print(self.interface_data) 162 | if int(self.interface_data[4]) > int(self.interface_data[5]): 163 | self.textBrowser_3.append("商品页码搜索区间有误\r") 164 | self.interface_data_state = False 165 | if self.interface_data[7] == "": 166 | self.textBrowser_3.append("请设置导出文件的位置\r") 167 | self.interface_data_state = False 168 | 169 | self.textBrowser_1.setText( 170 | "选择城市:" + self.interface_data[0] + 171 | "\r\r搜索规则:" + self.select_btn_translate + 172 | "\r\r搜索区域:" + self.interface_data[2] + 173 | "\r\r用餐人数:" + self.interface_data[3] + 174 | "\r\r搜索页数:" + self.interface_data[4] + " 到 " + self.interface_data[5] + " 页" + 175 | "\r\r导入位置:" + self.interface_data[6] + 176 | "\r\r导出位置:" + self.interface_data[7] 177 | ) 178 | 179 | if self.interface_data_state: 180 | self.pushButton_4.setEnabled(True) 181 | self.pushButton_2.setEnabled(False) 182 | self.frame_6.setEnabled(False) 183 | self.pushButton_1.setText("取消") 184 | self.textBrowser_3.append("爬虫参数设置无误,准备开始\r") 185 | else: 186 | self.pushButton_4.setEnabled(False) 187 | 188 | self.interface_data_state = True 189 | 190 | #开始按钮槽函数 191 | def start_btn(self): 192 | 193 | #准备创建Excel 194 | self.book = xlwt.Workbook(encoding='utf-8', style_compression=0) 195 | self.sheet = self.book.add_sheet('Sheet1', cell_overwrite_ok=True) 196 | a = ['序号', '页码', '个数', '店名', '店铺编号', '评分', '评论数', '地址', '人均消费', '是否为广告', '商品图片'] 197 | for i in range(10): 198 | self.sheet.write(0, i, a[i]) 199 | 200 | # 设置变量excel排数 201 | self.book_row = 1 202 | 203 | # #清空表格 204 | self.model.clear() 205 | self.model.setHorizontalHeaderLabels( 206 | ['页码', '个数', '店名', '店铺编号', '评分', '评论数', '地址', '人均消费', '是否为广告', '商品图片'] 207 | ) 208 | 209 | #开启另一个线程 210 | self.thread.setidentity(self.interface_data) 211 | self.thread.start() 212 | 213 | def main_stop_thread(self): 214 | print("main_stop_thread") 215 | self.textBrowser_3.append("正在中止程序,请稍等...\r") 216 | self.pushButton_5.setEnabled(False) 217 | self.thread.stop_thread() 218 | 219 | 220 | #显示表格函数 221 | def showtable(self, a): 222 | self.model.appendRow( 223 | [QStandardItem(str(a["page"])), 224 | QStandardItem(str(a["x"])), 225 | QStandardItem(str(a["title"])), 226 | QStandardItem(str(a["poiId"])), 227 | QStandardItem(str(a["avgScore"])), 228 | QStandardItem(str(a["allCommentNum"])), 229 | QStandardItem(str(a["address"])), 230 | QStandardItem(str(a["avgPrice"])), 231 | QStandardItem(str(a["hasAds"])), 232 | QStandardItem(str(a["frontImg"])) 233 | ] 234 | ) 235 | 236 | self.sheet.write(self.book_row, 0, self.book_row) 237 | self.sheet.write(self.book_row, 1, a["page"]) 238 | self.sheet.write(self.book_row, 2, a["x"]) 239 | self.sheet.write(self.book_row, 3, a["title"]) 240 | self.sheet.write(self.book_row, 4, a["poiId"]) 241 | self.sheet.write(self.book_row, 5, a["avgScore"]) 242 | self.sheet.write(self.book_row, 6, a["allCommentNum"]) 243 | self.sheet.write(self.book_row, 7, a["address"]) 244 | self.sheet.write(self.book_row, 8, a["avgPrice"]) 245 | self.sheet.write(self.book_row, 9, a["hasAds"]) 246 | self.sheet.write(self.book_row, 10, a["frontImg"]) 247 | 248 | self.book_row = self.book_row + 1 249 | 250 | 251 | 252 | #显示报错 253 | def showerror(self, a): 254 | self.textBrowser_3.append(a) 255 | 256 | #子线程状态,按钮禁用 257 | def not_click(self, a): 258 | if a == 1: 259 | self.pushButton_1.setEnabled(False) 260 | self.pushButton_4.setEnabled(False) 261 | self.pushButton_6.setEnabled(False) 262 | self.pushButton_5.setEnabled(True) 263 | else: 264 | self.pushButton_1.setEnabled(True) 265 | self.pushButton_4.setEnabled(True) 266 | self.pushButton_6.setEnabled(True) 267 | self.pushButton_5.setEnabled(False) 268 | 269 | #确认保存为excel函数 270 | def save_excel(self): 271 | self.book.save(self.interface_data[7]) 272 | self.textBrowser_3.append("已经成功保存到"+self.interface_data[7]+'\r') 273 | self.pushButton_6.setEnabled(False) 274 | 275 | 276 | 277 | 278 | class MyThread(QThread): 279 | 280 | #定义thread信号,传递结果字典 281 | result_thread = pyqtSignal(dict) 282 | error_thread = pyqtSignal(str) 283 | state_thread = pyqtSignal(int) 284 | 285 | def __init__(self, parent=None): 286 | super(MyThread, self).__init__(parent) 287 | 288 | self.identity = [] 289 | self.working = True 290 | 291 | def stop_thread(self): 292 | self.working = False 293 | # 294 | def setidentity(self, list): 295 | self.identity = list 296 | 297 | def translate_list(self, list): 298 | b = [None, None, None, None, None, None, None, None] 299 | 300 | # 商品分类参数 301 | cs = ["cd"] 302 | b[0] = cs[0] 303 | 304 | # 商品搜索规则 305 | gz = ["", "sales", "rating"] 306 | b[1] = gz[list[1] - 1] 307 | 308 | # 商品区域 309 | qu = { 310 | "武侯区": "b38", "青羊区": "b36", "成华区": "b37", "金牛区": "b35", "锦江区": "b34", "郫县": "b3805", 311 | "温江区": "b3798", "龙泉驿区": "b3795", "青白江区": "b3796", "彭州市": "b3800", "新津县": "b3808", "都江堰市": "b3799", 312 | "新都区": "b3797", "邛崃市": "b3801", "崇州市": "b3802", "金堂县": "b3803", "大邑县": "b3806", "蒲江县": "b3807", 313 | "简阳市": "b3906", "高新区": "b5895", "双流区": "b5896", "不限": "" 314 | } 315 | b[2] = qu[list[2]] 316 | 317 | # 商品人数 318 | rs = { 319 | "单人餐": "?attrs=65:152", "双人餐": "?attrs=65:152", "3-4人": "?attrs=65:152", "5-6人": "?attrs=65:152", 320 | "7-8人": "?attrs=65:152", "9-10人": "?attrs=65:152", "10人以上": "?attrs=65:152", "其他": "?attrs=65:152", 321 | "不限": "" 322 | } 323 | b[3] = rs[list[3]] 324 | 325 | b[4] = list[4] 326 | b[5] = list[5] 327 | b[6] = list[6] 328 | b[7] = list[7] 329 | print(b) 330 | return b 331 | 332 | def get_url(self, list, page): 333 | 334 | if list[1] == "" and list[2] == "": 335 | m = "" 336 | n = "" 337 | elif list[1] == "" or list[2] == "": 338 | m = "" 339 | n = "/" 340 | else: 341 | m = "/" 342 | n = "/" 343 | 344 | url = "https://" + list[0] + ".meituan.com/meishi/" + list[2] + m + list[1] + n + "pn" + str(page) + "/" + list[3] 345 | print(url) 346 | return self.get_text(url) 347 | 348 | def get_text(self, url): 349 | headers = { 350 | 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36', 351 | "Cookie": "iuuid=2E2E54C9DFA7A314152C83D9A8AB65EAED9362398A0EB825F49CC3C0A43E7655; cityname=%E6%88%90%E9%83%BD; _lxsdk_cuid=16d43d6cfa9c8-0385ae9f8c816b-67e153a-144000-16d43d6cfa932; _lxsdk=2E2E54C9DFA7A314152C83D9A8AB65EAED9362398A0EB825F49CC3C0A43E7655; webp=1; i_extend=H__a100040__b1; ci=59; rvct=59%2C1167%2C646%2C647; _hc.v=c4dd75e2-5b94-ec18-87e0-d063f99a4312.1570853269; client-id=37208fbf-f55d-4cc5-ba15-a2de479334a7; Hm_lvt_f66b37722f586a240d4621318a5a6ebe=1572192891; __utma=211559370.1754194501.1572192892.1572192892.1572192892.1; __utmz=211559370.1572192892.1.1.utmcsr=baidu|utmccn=baidu|utmcmd=organic|utmcct=zt_search; uuid=cda0d95991134777a94a.1572253882.1.0.0; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; __mta=45471131.1568880638007.1572187898426.1572253883194.14; _lxsdk_s=16e11a258f1-871-5a5-bb3%7C%7C24" 352 | } 353 | try: 354 | response = requests.get(url=url, headers=headers) 355 | if response.encoding is None or response.encoding == 'ISO-8859-1': 356 | response.encoding = response.apparent_encoding 357 | html_txt = response.text 358 | if response.status_code != 200: 359 | return None 360 | return html_txt 361 | except Exception as e: 362 | print("error", str(e)) 363 | 364 | def get_commemts(self, text, page): 365 | self.error_thread.emit("需爬取 " + str(self.identity[5]) + " 页,正在爬取第 " + str(page) + " 页\r") 366 | json_str = re.findall(r'poiInfos":(.*?)},"comHeader', text, re.S) 367 | json_str = json_str[0].replace("false", "False") 368 | json_str = json_str.replace("true", "True") 369 | food_list = eval(json_str) 370 | gs = 1 371 | for x in food_list: 372 | x.update({"page": page, "x": gs}) 373 | gs = gs + 1 374 | self.result_thread.emit(x) 375 | return food_list 376 | 377 | 378 | 379 | def run(self): 380 | print(self.translate_list(self.identity)) 381 | self.error_thread.emit("开始爬取,等耐心等待...\r") 382 | self.state_thread.emit(1) 383 | 384 | 385 | for i in range(int(self.identity[4]), int(self.identity[5])+1): 386 | a = self.translate_list(self.identity) 387 | text = self.get_url(a, i) 388 | if self.get_commemts(text, i) == []: 389 | self.error_thread.emit("此页商品数目不足,,或超过筛选条件页数,请扩大筛选条件或减少搜索页数。\r") 390 | break 391 | 392 | if self.working == False: 393 | break 394 | 395 | if self.working: 396 | self.error_thread.emit("已完成爬取\r") 397 | else: 398 | self.error_thread.emit("已中止程序\r") 399 | self.working = True 400 | 401 | self.state_thread.emit(0) 402 | 403 | 404 | 405 | if __name__ == "__main__": 406 | app = QApplication(sys.argv) 407 | form = ChildWindow() 408 | form.show() 409 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import re 3 | 4 | headers = { 5 | 'authority': 'mall.bilibili.com', 6 | 'pragma': 'no-cache', 7 | 'cache-control': 'no-cache', 8 | 'sec-fetch-dest': 'empty', 9 | # 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36', 10 | 'content-type': 'application/json', 11 | 'accept': '*/*', 12 | 'origin': 'https://www.bilibili.com', 13 | 'sec-fetch-site': 'same-site', 14 | 'sec-fetch-mode': 'cors', 15 | # 'referer': 'https://www.bilibili.com/blackboard/activity-_YSKZgCaw.html?from=banner&msource=mall_sony0521_fc&native.theme=1&night=0&share_medium=iphone&share_plat=ios&share_source=COPY&share_tag=s_i×tamp=1590376321&unique_k=IYKJVE', 16 | 'accept-language': 'zh-CN,zh;q=0.9', 17 | # '$cookie': '_uuid=3F019BA6-8EF7-BE6A-1BE6-A7708E72C30797715infoc; buvid3=4CFC1D59-CFE1-4FF0-91EC-895DDAC7E80E155823infoc; CURRENT_FNVAL=16; rpdid=|(um)~|)Yk)R0J\'ul)RJJlR~J; LIVE_BUVID=AUTO9515845223143272; DedeUserID=21642212; DedeUserID__ckMd5=3e991018320e5486; SESSDATA=fae49113%2C1601011289%2Ca69f5*31; bili_jct=c09d6ceeff539c7b75ce81fa31f2db45; CURRENT_QUALITY=116; bp_t_offset_21642212=391507043791143305; bp_video_offset_21642212=391720147181941998; bsource=seo_baidu; PVID=1; msource=pc_web; deviceFingerprint=8f499c9d6f1650fd1a4dfe368d4010fe', 18 | } 19 | 20 | get_url = 'https://www.bilibili.com/blackboard/activity-_YSKZgCaw.html?from=banner&msource=mall_sony0521_fc&native.theme=1&night=0&share_medium=iphone&share_plat=ios&share_source=COPY&share_tag=s_i×tamp=1590376321&unique_k=IYKJVE' 21 | a = requests.get(get_url) 22 | id = re.findall('window.activity = \{id: (.*?),', a.text, re.S) 23 | id = str(id[0]) 24 | print(id) 25 | 26 | page = '1' 27 | 28 | data = '{"device":"h5",' \ 29 | '"mid":0,' \ 30 | '"pageNum":%s,' % page + \ 31 | '"pageSize":20,' \ 32 | '"ignoreEssenceIds":[],' \ 33 | '"ignoreHotIds":[],' \ 34 | '"platform":2,' \ 35 | '"subPageSize":2,' \ 36 | '"subjectId":"%s", ' % id + \ 37 | '"subjectType":"3",' \ 38 | '"version":"1.0",' \ 39 | '"prePageLastFloorNo":null}' 40 | 41 | # response = requests.post('https://mall.bilibili.com/mall-c/ugc/content/allList', headers=headers, data=data) 42 | response = requests.post('https://mall.bilibili.com/mall-c/ugc/content/allHotUgcList', headers=headers, data=data) 43 | all_dict = response.json() 44 | print(all_dict) 45 | if all_dict['data']['hotList'] is None: 46 | list = all_dict['data']['commonList'] 47 | else: 48 | list = all_dict['data']['hotList'] 49 | 50 | print(list) 51 | # for i in list: 52 | # print(i) 53 | # print(i['floor']) 54 | # print(i['subjectId']) 55 | # print(i['subjectUrl']) 56 | # print(i['subjectName']) 57 | # print(i['content']) 58 | # print(i['imgs']) 59 | # print(i['ctime']) 60 | # print(i['lastReplyTime']) 61 | # print(i['upCount']) 62 | # print(i['downCount']) 63 | # print(i['replyCount']) 64 | # print(i['actualCount']) 65 | # print(i['userinfo']['mid']) 66 | # print(i['userinfo']['uname']) 67 | # print(i['userinfo']['sex']) 68 | # print(i['userinfo']['level']) 69 | # print(i['userinfo']['avatar']) 70 | # print(i['userinfo']['vip']['status']) -------------------------------------------------------------------------------- /zhongguotianqiwang.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayasora/Spider_PyQt5/40653c08e009661ef3ded4dbbfe55b0845dbfdb3/zhongguotianqiwang.py -------------------------------------------------------------------------------- /中国天气网.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:城市天气 2 | 网页主站:http://www.weather.com.cn/ 3 | 爬取站点(示例):http://www.weather.com.cn/weather1d/101270101.shtml#input 4 | 提取数量:根据需求提取(一共支持2571个城市) 5 | 爬取方式:关键字 6 | 关键字:城市 7 | 支持批量关键字:是 8 | 9 | ip访问频率限制:无限制 10 | 网站反爬策略:暂无 11 | 12 | 注意:仅支持城市搜索,如广州,成都,不支持省份搜索,如广东,四川。目前收录了2571个城市,可进入软件右下角将所有城市导出,再使用软件将xls文件导入进行爬取。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /京东.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:京东商品 2 | 网页主站:https://www.jd.com/ 3 | 爬取站点(示例):https://search.jd.com/search?keyword=菠萝&enc=utf-8 4 | 提取数量:页码 * 30 (页码上为100,根据具体筛选条件而定,可能实际小于100) 5 | 爬取方式:关键字 6 | 关键字:商品 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:因为加入了商品对应店铺详情(例如评分),需单独再次爬取,所以效率较低,如有其他需求请联系。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /太平洋汽车.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:太平洋汽车 2 | 网页主站:https://www.pcauto.com.cn/ 3 | 爬取站点(示例):https://price.pcauto.com.cn/ 4 | 提取数量:页码 * 20 (页码上限暂定100,根据具体筛选条件而定) 5 | 爬取方式:分类 6 | 关键字:无 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:如有其他功能需求请联系我进行更新。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /央视新闻.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | from moban import ChildWindow as a 5 | from PyQt5.QtCore import * 6 | from PyQt5.QtGui import * 7 | from PyQt5.QtWidgets import * 8 | from PyQt5 import QtCore, QtGui, QtWidgets 9 | import requests 10 | import re 11 | 12 | class ChildWindow(a): 13 | def __init__(self, parent=None): 14 | super(ChildWindow, self).__init__(parent) 15 | 16 | 17 | # 选择开启的功能 18 | def open_chose(self): 19 | # self.open1() 20 | # self.open2() 21 | # self.open3() 22 | self.open4() 23 | self.open5() 24 | # self.open6() 25 | # self.open7() 26 | 27 | # 检查参数是否正确 28 | def find_error(self): 29 | self.interface_data_state = True 30 | # if not self.param["1 1"]: 31 | # self.interface_data_state = False 32 | # if not self.in_address: 33 | # self.interface_data_state = False 34 | if self.param["4 1"] > self.param["4 2"]: 35 | self.interface_data_state = False 36 | self.textBrowser_3.append("页码参数设置有误,请重新输入") 37 | if self.param["5"] == []: 38 | self.interface_data_state = False 39 | self.textBrowser_3.append("请至少勾选一个项目") 40 | 41 | # 显示参数列表 42 | def show_param(self): 43 | if self.param["3 3"]: 44 | text3 = "全部" 45 | else: 46 | text3 = self.param["3 1"] + " 到 " + self.param["3 2"] 47 | if self.param["4 3"]: 48 | text4 = "全部" 49 | else: 50 | text4 = self.param["4 1"] + " 到 " + self.param["4 2"] 51 | self.textBrowser_1.setText( 52 | # "关键字:" + self.param["1 1"] + 53 | # "\r关键字:" + self.param["1 2"] + 54 | # "\r搜索规则:" + self.param["2 1"] + " " + self.param["2 2"] + " " + self.param["2 3"] + 55 | # "\r价格区间:" + text3 + 56 | "搜索页数:" + text4 + 57 | "\r多选项目:" + str(self.param["5"]) 58 | # "\r日期:" + self.param["6 1"] + " 至 " + self.param["6 2"] 59 | ) 60 | 61 | def set_all(self): 62 | print("yangshi") 63 | self.thread = yangshi() 64 | self.thread.error_thread.connect(self.add_text) 65 | self.thread.result_thread.connect(self.show_table) 66 | self.thread.state_thread.connect(self.over_thread) 67 | self.thread.msg_thread.connect(self.show_msg) 68 | self.thread.img_thread.connect(self.show_img) 69 | 70 | self.pushButton_5.clicked.connect(self.thread.break_work) 71 | 72 | # 子窗口名字修改 73 | self.setWindowTitle("央视新闻爬虫") 74 | 75 | # 子窗口最大化 76 | # self.showMaximized() 77 | 78 | # box标题 79 | self.groupBox.setTitle("央视新闻") 80 | 81 | # 表格 82 | self.table_list = ["分类", "id", "图片2", "标题", "关键字", "图片1", "时间", "简要", "网址"] 83 | 84 | self.spinBox_5.setRange(1, 7) 85 | self.spinBox_6.setRange(1, 7) 86 | 87 | self.checkBox_12.setText("新闻") 88 | self.checkBox_13.setText("国内") 89 | self.checkBox_21.setText("国际") 90 | self.checkBox_22.setText("社会") 91 | self.checkBox_23.setText("法制") 92 | self.checkBox_31.setText("文娱") 93 | self.checkBox_32.setText("科技") 94 | self.checkBox_33.setText("生活") 95 | self.checkBox_41.setText("教育") 96 | 97 | def show_table(self, a): 98 | self.model.appendRow( 99 | [QStandardItem(str(a["type"])), 100 | QStandardItem(str(a["id"])), 101 | QStandardItem(str(a["image2"])), 102 | QStandardItem(str(a["title"])), 103 | QStandardItem(str(a["keywords"])), 104 | QStandardItem(str(a["image"])), 105 | QStandardItem(str(a["focus_date"])), 106 | QStandardItem(str(a["brief"])), 107 | QStandardItem(str(a["url"])) 108 | ] 109 | ) 110 | self.tableView.scrollToBottom() 111 | 112 | self.sheet.write(self.book_row, 0, a["type"]) 113 | self.sheet.write(self.book_row, 1, a["id"]) 114 | self.sheet.write(self.book_row, 2, a["image2"]) 115 | self.sheet.write(self.book_row, 3, a["title"]) 116 | self.sheet.write(self.book_row, 4, a["keywords"]) 117 | self.sheet.write(self.book_row, 5, a["image"]) 118 | self.sheet.write(self.book_row, 6, a["focus_date"]) 119 | self.sheet.write(self.book_row, 7, a["brief"]) 120 | self.sheet.write(self.book_row, 8, a["url"]) 121 | 122 | self.book_row = self.book_row + 1 123 | 124 | 125 | 126 | class yangshi(QThread): 127 | result_thread = pyqtSignal(dict) 128 | error_thread = pyqtSignal(str) 129 | state_thread = pyqtSignal(bool) 130 | msg_thread = pyqtSignal(str) 131 | img_thread = pyqtSignal(int) 132 | 133 | def __init__(self, parent=None): 134 | super(yangshi, self).__init__(parent) 135 | 136 | self.headers = { 137 | 'Connection': 'keep-alive', 138 | 'Pragma': 'no-cache', 139 | 'Cache-Control': 'no-cache', 140 | 'Accept': 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01', 141 | 'X-Requested-With': 'XMLHttpRequest', 142 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', 143 | 'Accept-Encoding': 'gzip, deflate', 144 | 'Accept-Language': 'zh-CN,zh;q=0.9', 145 | } 146 | 147 | self.dicts = { 148 | "新闻": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/news_%s.jsonp?cb=t&cb=news" % i', 149 | "国内": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/china_%s.jsonp" % i', 150 | "国际": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/world_%s.jsonp?cb=t&cb=world" % i', 151 | "社会": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/society_%s.jsonp?cb=t&cb=society" % i', 152 | "法制": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/law_%s.jsonp?cb=t&cb=law" % i', 153 | "文娱": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/ent_%s.jsonp?cb=t&cb=ent" % i', 154 | "科技": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/tech_%s.jsonp?cb=t&cb=tech" % i', 155 | "生活": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/life_%s.jsonp?cb=t&cb=life" % i', 156 | "教育": '"http://news.cctv.com/2019/07/gaiban/cmsdatainterface/page/edu_%s.jsonp?cb=t&cb=edu" % i' 157 | } 158 | 159 | def setidentity(self, dict): 160 | self.working = True 161 | self.identity = dict 162 | if self.identity["4 3"]: 163 | self.identity["4 1"] = 1 164 | self.identity["4 2"] = 7 165 | self.now = 0 166 | self.all = (int(self.identity["4 2"]) - int(self.identity["4 1"]) + 1) * len(self.identity["5"]) 167 | print(dict) 168 | 169 | def show_text(self, text:str): 170 | self.error_thread.emit(text) 171 | # print(text) 172 | 173 | def show_msg(self, text): 174 | self.msg_thread.emit(text) 175 | 176 | def show_img(self, text): 177 | self.img_thread.emit(text) 178 | 179 | def final_data(self, dict): 180 | self.result_thread.emit(dict) 181 | # print(dict) 182 | 183 | def break_work(self): 184 | self.show_text("正在中止程序...") 185 | self.working = False 186 | 187 | def get_text(self, url:str): 188 | i = 1 189 | try: 190 | response = requests.get(url, headers=self.headers, verify=False, timeout=2) 191 | except: 192 | try: 193 | response = requests.get(url, headers=self.headers, verify=False, timeout=2) 194 | except: 195 | try: 196 | response = requests.get(url, headers=self.headers, verify=False, timeout=2) 197 | except: 198 | i = 0 199 | if i == 1: 200 | response.encoding = response.apparent_encoding 201 | text = response.text 202 | return text 203 | else: 204 | return None 205 | 206 | def crawl(self, keyword, page1, page2): 207 | page1 = int(page1) 208 | page2 = int(page2) 209 | for i in range(page1, page2 + 1): 210 | if self.working: 211 | url = eval(self.dicts[keyword]) 212 | self.show_text("正在爬取关键字: " + keyword + " 页码进度: " + str(i-page1+1) + " / " + str(page2-page1+1)) 213 | self.show_msg("关键字: " + keyword + " 页码:" + str(i-page1+1)) 214 | self.show_img(int(self.now/self.all*100)) 215 | self.now = self.now+1 216 | text = self.get_text(url) 217 | if text: 218 | a = re.findall(".*?\((.*)\)", text)[0] 219 | try: 220 | print(a) 221 | a = eval(a) 222 | for ii in a["data"]["list"]: 223 | ii["type"] = str(keyword) 224 | self.final_data(ii) 225 | except: 226 | self.show_text("关键字:" + str(keyword) + "出错,请求返回格式有误") 227 | else: 228 | self.show_text("关键字:" + str(keyword) + "爬取出错,无法访问该网址") 229 | else: 230 | break 231 | 232 | def run(self): 233 | for i in range(len(self.identity["5"])): 234 | if self.working: 235 | self.show_text("正在爬取关键字: "+str(self.identity["5"][i])+" 关键字进度: "+str(i+1)+" / "+str(len(self.identity["5"]))) 236 | # self.crawl(self.identity["key"][i], self.identity["page1"], self.identity["page2"]) 237 | self.crawl(self.identity["5"][i], self.identity["4 1"], self.identity["4 2"]) 238 | else: 239 | break 240 | self.state_thread.emit(False) 241 | if self.working: 242 | self.error_thread.emit("爬取完成") 243 | self.img_thread.emit(100) 244 | else: 245 | self.error_thread.emit("已中止程序") 246 | 247 | if __name__ == "__main__": 248 | app = QApplication(sys.argv) 249 | b = a() 250 | b.show() 251 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /央视新闻.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:央视新闻爬虫 2 | 网页主站:http://news.cctv.com/index.shtml 3 | 爬取站点(示例):http://news.cctv.com/china/?spm=C94212.P4YnMod9m2uD.0.0 4 | 提取数量:分类 * 页码 * 不定 (页码上限暂定7,根据具体筛选条件而定) 5 | 爬取方式:分类 6 | 关键字:无 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:如有其他功能需求请联系我进行更新。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /微博榜单.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:微博榜单 2 | 网页主站:https://weibo.com/ 3 | 爬取站点(示例):https://d.weibo.com/231650_ctg1_-_1# 4 | 提取数量:分类 * 60 (部分分类数量小于60) 5 | 爬取方式:分类 6 | 关键字:无 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:有限制 10 | 网站反爬策略:暂无 11 | 12 | 注意:因为网站有ip访问频率限制,可能会出现暂时无法访问的情况。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /微博话题.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:微博话题 2 | 网页主站:https://weibo.com/ 3 | 爬取站点(示例):https://s.weibo.com/weibo/%23菠萝%23 4 | 提取数量:根据需要批量提取 5 | 爬取方式:关键字 6 | 关键字:话题 7 | 支持批量关键字:是 8 | 9 | ip访问频率限制:有限制,且限制程度高 10 | 网站反爬策略:ip访问频率限制 11 | 12 | 注意:因为网站有严格的ip访问频率限制,每次请求之间设置的等待时间较长,导致爬取效率低下,如有需要大量话题爬取,可自行购买ip代理,或与我联系。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /无忧招聘网.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:无忧网招聘信息 2 | 网页主站:https://search.51job.com/ 3 | 爬取站点(示例):https://search.51job.com/list/090200,000000,0000,39,9,99,%2B,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare= 4 | 提取数量:页码 * 50 5 | 爬取方式:网址 6 | 关键字:url 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:点击网站信息后网址会改变,复制改变后的网址达到分类目的。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /无忧网.py: -------------------------------------------------------------------------------- 1 | import sys, os 2 | if hasattr(sys, 'frozen'): 3 | os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH'] 4 | from moban import ChildWindow as a 5 | from PyQt5.QtCore import * 6 | from PyQt5.QtGui import * 7 | from PyQt5.QtWidgets import * 8 | from PyQt5 import QtCore, QtGui, QtWidgets 9 | import requests 10 | # import qdarkstyle 11 | import re 12 | from lxml import etree 13 | 14 | class ChildWindow(a): 15 | def __init__(self, parent=None): 16 | super(ChildWindow, self).__init__(parent) 17 | 18 | def open1(self): 19 | # 第1行 20 | self.lineEdit.setMaxLength(200) 21 | self.label_1.setEnabled(True) 22 | self.label_1.setText('网址:') 23 | self.lineEdit.setEnabled(True) 24 | 25 | # def open8(self): 26 | # # 第8行 27 | # self.label.setEnabled(True) 28 | # self.label.setText('番剧集数:') 29 | # self.label_21.setEnabled(True) 30 | # self.spinBox_9.setEnabled(True) 31 | # self.label_22.setEnabled(True) 32 | # # self.spinBox_10.setEnabled(True) 33 | # # self.label_23.setEnabled(True) 34 | # # self.checkBox_6.setEnabled(True) 35 | # self.label_23.close() 36 | # self.label_22.setText('集') 37 | # self.checkBox_6.close() 38 | # self.spinBox_10.close() 39 | # 40 | # def close8(self): 41 | # pass 42 | 43 | 44 | # 选择开启的功能 45 | def open_chose(self): 46 | self.open1() 47 | # self.open2() 48 | # self.open3() 49 | self.open4() 50 | # self.open5() 51 | # self.open6() 52 | # self.open7() 53 | # self.open8() 54 | 55 | # 检查参数是否正确 56 | def find_error(self): 57 | self.interface_data_state = True 58 | if not self.param["1 1"]: 59 | self.interface_data_state = False 60 | self.textBrowser_3.append("未输入网址,请输入") 61 | # if not self.in_address: 62 | # self.interface_data_state = False 63 | if int(self.param["4 1"]) > int(self.param["4 2"]): 64 | self.interface_data_state = False 65 | self.textBrowser_3.append("页码参数设置有误,请重新输入") 66 | if self.param["4 3"] is False and self.param["4 1"] == '0': 67 | self.interface_data_state = False 68 | self.textBrowser_3.append("页码不能为0") 69 | # if self.param["5"] == []: 70 | # self.interface_data_state = False 71 | # self.textBrowser_3.append("请至少勾选一个项目") 72 | 73 | # 显示参数列表 74 | def show_param(self): 75 | if self.param["3 3"]: 76 | text3 = "全部" 77 | else: 78 | text3 = self.param["3 1"] + " 到 " + self.param["3 2"] 79 | if self.param["4 3"]: 80 | text4 = "全部" 81 | else: 82 | text4 = self.param["4 1"] + " 到 " + self.param["4 2"] 83 | self.textBrowser_1.setText( 84 | "网址:" + self.param["1 1"] + 85 | # "\r网址:" + self.param["1 2"] + 86 | # "\r类型:" + self.param["1 2"] + 87 | # "\r搜索规则:" + self.param["2 1"] + 88 | # "\r价格区间:" + text3 + 89 | "\r搜索页数:" + text4 90 | # "\r多选项目:" + str(self.param["5"]) 91 | # "\r日期:" + self.param["6 1"] + " 至 " + self.param["6 2"] 92 | # "\r番剧集数:" + self.param['8 1'] 93 | ) 94 | 95 | def set_all(self): 96 | self.thread = yangshi() 97 | self.thread.error_thread.connect(self.add_text) 98 | self.thread.result_thread.connect(self.show_table) 99 | self.thread.state_thread.connect(self.over_thread) 100 | self.thread.msg_thread.connect(self.show_msg) 101 | self.thread.img_thread.connect(self.show_img) 102 | 103 | self.pushButton_5.clicked.connect(self.thread.break_work) 104 | 105 | # 子窗口名字修改 106 | self.setWindowTitle("无忧网信息爬虫") 107 | 108 | # 子窗口最大化 109 | # self.showMaximized() 110 | 111 | # box标题 112 | self.groupBox.setTitle("无忧网信息") 113 | 114 | # 表格 115 | self.table_list = ['页码', "信息", '福利', "类型", "规模", "需求", "职位", "公司", "地点1", "薪资", "发布时间", "网址"] 116 | 117 | # self.checkBox_12.setText("要闻") 118 | # self.checkBox_13.setText("国内") 119 | # self.checkBox_21.setText("国际") 120 | # self.checkBox_22.setText("独家") 121 | # self.checkBox_23.setText("军事") 122 | # self.checkBox_31.setText("财经") 123 | # self.checkBox_32.setText("科技") 124 | # self.checkBox_33.setText("体育") 125 | # self.checkBox_41.setText("娱乐") 126 | # self.checkBox_42.setText("时尚") 127 | # self.checkBox_43.setText("汽车") 128 | # self.checkBox_51.setText("房产") 129 | # self.checkBox_52.setText("航空") 130 | # self.checkBox_53.setText("健康") 131 | 132 | def show_table(self, a): 133 | self.model.appendRow( 134 | [QStandardItem(str(a["页码"])), 135 | QStandardItem(str(a["信息"])), 136 | QStandardItem(str(a["福利"])), 137 | QStandardItem(str(a["类型"])), 138 | QStandardItem(str(a["规模"])), 139 | QStandardItem(str(a["需求"])), 140 | QStandardItem(str(a["职位"])), 141 | QStandardItem(str(a["公司"])), 142 | QStandardItem(str(a['地点1'])), 143 | QStandardItem(str(a['薪资'])), 144 | QStandardItem(str(a['发布时间'])), 145 | QStandardItem(str(a['网址'])), 146 | ] 147 | ) 148 | self.tableView.scrollToBottom() 149 | 150 | self.sheet.write(self.book_row, 0, a["页码"]) 151 | self.sheet.write(self.book_row, 1, a["信息"]) 152 | self.sheet.write(self.book_row, 2, a["福利"]) 153 | self.sheet.write(self.book_row, 3, a["类型"]) 154 | self.sheet.write(self.book_row, 4, a["规模"]) 155 | self.sheet.write(self.book_row, 5, a["需求"]) 156 | self.sheet.write(self.book_row, 6, a["职位"]) 157 | self.sheet.write(self.book_row, 7, a["公司"]) 158 | self.sheet.write(self.book_row, 8, a['地点1']) 159 | self.sheet.write(self.book_row, 9, a['薪资']) 160 | self.sheet.write(self.book_row, 10, a['发布时间']) 161 | self.sheet.write(self.book_row, 11, a['网址']) 162 | 163 | self.book_row = self.book_row + 1 164 | 165 | 166 | 167 | class yangshi(QThread): 168 | result_thread = pyqtSignal(dict) 169 | error_thread = pyqtSignal(str) 170 | state_thread = pyqtSignal(bool) 171 | msg_thread = pyqtSignal(str) 172 | img_thread = pyqtSignal(int) 173 | 174 | def __init__(self, parent=None): 175 | super(yangshi, self).__init__(parent) 176 | 177 | def setidentity(self, dict): 178 | self.working = True 179 | self.identity = dict 180 | self.now = 0 181 | # self.all = len(self.identity["5"]) 182 | 183 | def show_text(self, text:str): 184 | self.error_thread.emit(text) 185 | # print(text) 186 | 187 | def show_msg(self, text): 188 | self.msg_thread.emit(text) 189 | 190 | def show_img(self, text): 191 | self.img_thread.emit(text) 192 | 193 | def final_data(self, dict): 194 | self.result_thread.emit(dict) 195 | # print(dict) 196 | 197 | def break_work(self): 198 | self.show_text("正在中止程序...") 199 | self.working = False 200 | 201 | def get_page(self, url): 202 | headers = { 203 | 'Host': 'search.51job.com', 204 | 'Cache-Control': 'max-age=0', 205 | 'Upgrade-Insecure-Requests': '1', 206 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36', 207 | 'Sec-Fetch-Dest': 'document', 208 | # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 209 | 'Sec-Fetch-Site': 'same-origin', 210 | 'Sec-Fetch-Mode': 'navigate', 211 | 'Sec-Fetch-User': '?1', 212 | # 'Referer': 'https://search.51job.com/list/090200,000000,0000,39,9,99,%2B,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=', 213 | 'Accept-Language': 'zh-CN,zh;q=0.9', 214 | } 215 | 216 | try: 217 | response = requests.get(url, headers=headers, timeout=2) 218 | except: 219 | try: 220 | response = requests.get(url, headers=headers, timeout=2) 221 | except: 222 | try: 223 | response = requests.get(url, headers=headers, timeout=2) 224 | except: 225 | response = requests.get(url, headers=headers, timeout=2) 226 | response.encoding = 'gbk' 227 | result = etree.HTML(response.text) 228 | results = result.xpath("//div[@class='p_in']/span[@class='td'][1]//text()")[0] 229 | page = re.findall('共(.*?)页', results)[0] 230 | return page 231 | 232 | def get1(self, url): 233 | headers = { 234 | 'Host': 'search.51job.com', 235 | 'Cache-Control': 'max-age=0', 236 | 'Upgrade-Insecure-Requests': '1', 237 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36', 238 | 'Sec-Fetch-Dest': 'document', 239 | # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 240 | 'Sec-Fetch-Site': 'same-origin', 241 | 'Sec-Fetch-Mode': 'navigate', 242 | 'Sec-Fetch-User': '?1', 243 | # 'Referer': 'https://search.51job.com/list/090200,000000,0000,39,9,99,%2B,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=', 244 | 'Accept-Language': 'zh-CN,zh;q=0.9', 245 | } 246 | 247 | try: 248 | response = requests.get(url, headers=headers, timeout=2) 249 | except: 250 | try: 251 | response = requests.get(url, headers=headers, timeout=2) 252 | except: 253 | try: 254 | response = requests.get(url, headers=headers, timeout=2) 255 | except: 256 | response = requests.get(url, headers=headers, timeout=2) 257 | response.encoding = 'gbk' 258 | result = etree.HTML(response.text) 259 | results = result.xpath("//div[@id='resultList']/div[@class='el']") 260 | for i in results: 261 | dicts = {} 262 | dicts['职位'] = i.xpath("./p[1]//span/a/@title") 263 | dicts['公司'] = i.xpath("./span[@class='t2']/a//text()") 264 | dicts['地点1'] = i.xpath("./span[@class='t3']//text()") 265 | dicts['薪资'] = i.xpath("./span[@class='t4']//text()") 266 | dicts['发布时间'] = i.xpath("./span[@class='t5']//text()") 267 | dicts['网址'] = i.xpath("./p[1]//span/a/@href")[0] 268 | yield dicts 269 | 270 | def get2(self, url, dict3, page): 271 | headers = { 272 | 'Host': 'search.51job.com', 273 | 'Cache-Control': 'max-age=0', 274 | 'Upgrade-Insecure-Requests': '1', 275 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36', 276 | 'Sec-Fetch-Dest': 'document', 277 | # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 278 | 'Sec-Fetch-Site': 'same-origin', 279 | 'Sec-Fetch-Mode': 'navigate', 280 | 'Sec-Fetch-User': '?1', 281 | # 'Referer': 'https://search.51job.com/list/090200,000000,0000,39,9,99,%2B,2,3.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=', 282 | 'Accept-Language': 'zh-CN,zh;q=0.9', 283 | } 284 | try: 285 | response = requests.get(url, headers=headers, timeout=2) 286 | except: 287 | try: 288 | response = requests.get(url, headers=headers, timeout=2) 289 | except: 290 | try: 291 | response = requests.get(url, headers=headers, timeout=2) 292 | except: 293 | response = requests.get(url, headers=headers, timeout=2) 294 | response.encoding = 'gbk' 295 | html = etree.HTML(response.text) 296 | results1 = html.xpath("//div[@class='cn']/p[@class='msg ltype']//text()") 297 | a = [] 298 | for i in results1: 299 | i = i.replace('\xa0', "") 300 | if i != '|': 301 | a.append(i) 302 | results2 = html.xpath("//div[@class='t1']/span[@class='sp4']//text()") 303 | results3 = html.xpath("//div[@class='com_tag']/p[@class='at'][1]//text()") 304 | results4 = html.xpath("//div[@class='com_tag']/p[@class='at'][2]//text()") 305 | results5 = html.xpath("//div[@class='com_tag']/p[@class='at'][3]/a//text()") 306 | dicts = {'页码': page, '信息': a, "福利": results2, '类型': results3, '规模': results4, '需求': results5} 307 | dicts.update(dict3) 308 | self.final_data(dicts) 309 | 310 | def change_url(self, url, page): 311 | c = re.sub('([\d]+).html', '测试', url) 312 | c = c.replace('测试', str(page) + '.html') 313 | return c 314 | 315 | def run(self): 316 | try: 317 | all_page = int(self.get_page(self.identity['1 1'])) 318 | except: 319 | self.show_text("网址有误,或分类有误,请修改网址或分类") 320 | self.working = False 321 | 322 | if self.working == True: 323 | if self.identity['4 3']: 324 | for page in range(1, all_page + 1): 325 | if self.working: 326 | self.show_msg("页码: " + str(page)) 327 | self.show_img(int(page / all_page * 100)) 328 | self.show_text("正在爬取页码: " + str(page) + " 页码进度: " + str(page) + " / " + str(all_page)) 329 | url = self.change_url(self.identity['1 1'], page) 330 | a = self.get1(url) 331 | for i in a: 332 | if self.working == True: 333 | url2 = i['网址'] 334 | self.get2(url2, i, page) 335 | else: 336 | break 337 | else: 338 | break 339 | else: 340 | for page in range(int(self.identity['4 1']), int(self.identity['4 2']) + 1): 341 | if self.working: 342 | self.show_msg("页码: " + str(page)) 343 | self.show_img(int((page-int(self.identity['4 1'])+1) / (int(self.identity['4 2'])-int(self.identity['4 1'])+1) * 100)) 344 | self.show_text("正在爬取页码: " + str(page) + " 页码进度: " + str(page) + " / " + str(self.identity['4 2'])) 345 | url = self.change_url(self.identity['1 1'], page) 346 | a = self.get1(url) 347 | for i in a: 348 | if self.working == True: 349 | url2 = i['网址'] 350 | self.get2(url2, i, page) 351 | else: 352 | break 353 | else: 354 | break 355 | 356 | self.state_thread.emit(False) 357 | if self.working: 358 | self.error_thread.emit("爬取完成") 359 | # self.img_thread.emit(100) 360 | else: 361 | self.error_thread.emit("已中止程序") 362 | 363 | # for i in range(int(self.identity['4 1']), int(self.identity['4 2'])+1): 364 | # if self.working: 365 | # # self.show_text("正在爬取页码: "+str(i)+" 页码进度: "+str(i+1)+" / "+str(len(self.identity["5"]))) 366 | # # self.crawl(self.identity["key"][i], self.identity["page1"], self.identity["page2"]) 367 | # self.crawl(i) 368 | # else: 369 | # break 370 | self.state_thread.emit(False) 371 | 372 | if __name__ == "__main__": 373 | app = QApplication(sys.argv) 374 | # app.setStyleSheet(qdarkstyle.load_stylesheet()) 375 | form = ChildWindow() 376 | form.show() 377 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /猫眼票房.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:猫眼票房 2 | 网页主站:http://piaofang.maoyan.com/ 3 | 爬取站点(示例):http://piaofang.maoyan.com/dashboard?date=2020-01-01 4 | 提取数量:1(天数) * 20(不等) 5 | 爬取方式:分类 6 | 关键字:日期 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:疫情期间的日期无票房统计,为正常现象。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /猫眼评分.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:猫眼评分 2 | 网页主站:https://maoyan.com/ 3 | 爬取站点(示例):https://maoyan.com/query?kw=请问您要来点兔子么 4 | 提取数量:1(关键字) * 1 5 | 爬取方式:关键字 6 | 关键字:电影 7 | 支持批量关键字:是 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:爬取内容为搜索结果中的第一个匹配项,请确保关键字准确。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /网易.py: -------------------------------------------------------------------------------- 1 | a = { 2 | 'title': '1046例!西班牙新冠肺炎确诊病例破千死亡26例', 3 | 'digest': '', 4 | 'docurl': 'https://news.163.com/20/0310/02/F7ASP4TJ0001899O.html', 5 | 'commenturl': 'http://comment.tie.163.com/F7ASP4TJ0001899O.html', 6 | 'tienum': 283, 7 | 'tlastid': '国际新闻', 8 | 'tlink': 'https://news.163.com/20/0310/02/F7ASP4TJ0001899O.html', 9 | 'label': '其它', 10 | 'keywords': [{ 11 | 'akey_link': 'http://news.163.com/keywords/8/7/897f73ed7259/1.html', 12 | 'keyname': '西班牙' 13 | }, { 14 | 'akey_link': 'http://news.163.com/keywords/6/b/65b051a080ba708e/1.html', 15 | 'keyname': '新冠肺炎' 16 | }], 17 | 'time': '03/10/202002:19:56', 18 | 'newstype': 'article', 19 | 'pics3': [], 20 | 'channelname': 'yaowen', 21 | 'source': '央视新闻客户端', 22 | 'imgurl': 'http://cms-bucket.ws.126.net/2020/0310/a62de56bp00q6xuwy00f0c000s600e3c.png', 23 | 'add1': '', 24 | 'add2': '', 25 | 'add3': '' 26 | } 27 | 28 | 29 | if __name__ == '__main__': 30 | a["keywords"].append({ 31 | 'akey_link': 'http://news.163.com/keywords/7/f/7ef4591a52294e9a/1.html', 32 | 'keyname': '维多利亚' 33 | }) 34 | print(a) -------------------------------------------------------------------------------- /网易新闻.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | from moban import ChildWindow as a 5 | from PyQt5.QtCore import * 6 | from PyQt5.QtGui import * 7 | from PyQt5.QtWidgets import * 8 | from PyQt5 import QtCore, QtGui, QtWidgets 9 | import requests 10 | import qdarkstyle 11 | import re 12 | 13 | class ChildWindow(a): 14 | def __init__(self, parent=None): 15 | super(ChildWindow, self).__init__(parent) 16 | 17 | # 选择开启的功能 18 | def open_chose(self): 19 | # self.open1() 20 | # self.open2() 21 | # self.open3() 22 | # self.open4() 23 | self.open5() 24 | # self.open6() 25 | # self.open7() 26 | 27 | # 检查参数是否正确 28 | def find_error(self): 29 | self.interface_data_state = True 30 | # if not self.param["1 1"]: 31 | # self.interface_data_state = False 32 | # if not self.in_address: 33 | # self.interface_data_state = False 34 | # if self.param["4 1"] > self.param["4 2"]: 35 | # self.interface_data_state = False 36 | # self.textBrowser_3.append("页码参数设置有误,请重新输入") 37 | if self.param["5"] == []: 38 | self.interface_data_state = False 39 | self.textBrowser_3.append("请至少勾选一个项目") 40 | 41 | # 显示参数列表 42 | def show_param(self): 43 | if self.param["3 3"]: 44 | text3 = "全部" 45 | else: 46 | text3 = self.param["3 1"] + " 到 " + self.param["3 2"] 47 | if self.param["4 3"]: 48 | text4 = "全部" 49 | else: 50 | text4 = self.param["4 1"] + " 到 " + self.param["4 2"] 51 | self.textBrowser_1.setText( 52 | # "关键字:" + self.param["1 1"] + 53 | # "\r关键字:" + self.param["1 2"] + 54 | # "\r搜索规则:" + self.param["2 1"] + " " + self.param["2 2"] + " " + self.param["2 3"] + 55 | # "\r价格区间:" + text3 + 56 | # "搜索页数:" + text4 + 57 | "多选项目:" + str(self.param["5"]) 58 | # "\r日期:" + self.param["6 1"] + " 至 " + self.param["6 2"] 59 | ) 60 | 61 | def set_all(self): 62 | self.thread = yangshi() 63 | self.thread.error_thread.connect(self.add_text) 64 | self.thread.result_thread.connect(self.show_table) 65 | self.thread.state_thread.connect(self.over_thread) 66 | self.thread.msg_thread.connect(self.show_msg) 67 | self.thread.img_thread.connect(self.show_img) 68 | 69 | self.pushButton_5.clicked.connect(self.thread.break_work) 70 | 71 | # 子窗口名字修改 72 | self.setWindowTitle("网易新闻爬虫") 73 | 74 | # 子窗口最大化 75 | # self.showMaximized() 76 | 77 | # box标题 78 | self.groupBox.setTitle("网易新闻") 79 | 80 | # 表格 81 | self.table_list = ["分类", "标题", "新闻网址", "评论网址", "跟帖次数", "红框分类", "标签", "关键字1", "关键字1网址", "关键字2", "关键字2网址", "关键字3", "关键字3网址", "时间", "新闻类型", "频道名称", "来源", "图片"] 82 | 83 | self.checkBox_12.setText("要闻") 84 | self.checkBox_13.setText("国内") 85 | self.checkBox_21.setText("国际") 86 | self.checkBox_22.setText("独家") 87 | self.checkBox_23.setText("军事") 88 | self.checkBox_31.setText("财经") 89 | self.checkBox_32.setText("科技") 90 | self.checkBox_33.setText("体育") 91 | self.checkBox_41.setText("娱乐") 92 | self.checkBox_42.setText("时尚") 93 | self.checkBox_43.setText("汽车") 94 | self.checkBox_51.setText("房产") 95 | self.checkBox_52.setText("航空") 96 | self.checkBox_53.setText("健康") 97 | 98 | def show_table(self, a): 99 | self.model.appendRow( 100 | [QStandardItem(str(a["分类"])), 101 | QStandardItem(str(a["title"])), 102 | QStandardItem(str(a["docurl"])), 103 | QStandardItem(str(a["commenturl"])), 104 | QStandardItem(str(a["tienum"])), 105 | QStandardItem(str(a["tlastid"])), 106 | QStandardItem(str(a["label"])), 107 | QStandardItem(str(a["keywords"][0]["keyname"])), 108 | QStandardItem(str(a["keywords"][0]["akey_link"])), 109 | QStandardItem(str(a["keywords"][1]["keyname"])), 110 | QStandardItem(str(a["keywords"][1]["akey_link"])), 111 | QStandardItem(str(a["keywords"][2]["keyname"])), 112 | QStandardItem(str(a["keywords"][2]["akey_link"])), 113 | QStandardItem(str(a["time"])), 114 | QStandardItem(str(a["newstype"])), 115 | QStandardItem(str(a["channelname"])), 116 | QStandardItem(str(a["source"])), 117 | QStandardItem(str(a["imgurl"])) 118 | ] 119 | ) 120 | self.tableView.scrollToBottom() 121 | 122 | self.sheet.write(self.book_row, 0, a["分类"]) 123 | self.sheet.write(self.book_row, 1, a["title"]) 124 | self.sheet.write(self.book_row, 2, a["docurl"]) 125 | self.sheet.write(self.book_row, 3, a["commenturl"]) 126 | self.sheet.write(self.book_row, 4, a["tienum"]) 127 | self.sheet.write(self.book_row, 5, a["tlastid"]) 128 | self.sheet.write(self.book_row, 6, a["label"]) 129 | self.sheet.write(self.book_row, 7, a["keywords"][0]["keyname"]) 130 | self.sheet.write(self.book_row, 8, a["keywords"][0]["akey_link"]) 131 | self.sheet.write(self.book_row, 9, a["keywords"][1]["keyname"]) 132 | self.sheet.write(self.book_row, 10, a["keywords"][1]["akey_link"]) 133 | self.sheet.write(self.book_row, 11, a["keywords"][2]["keyname"]) 134 | self.sheet.write(self.book_row, 12, a["keywords"][2]["akey_link"]) 135 | self.sheet.write(self.book_row, 13, a["time"]) 136 | self.sheet.write(self.book_row, 14, a["newstype"]) 137 | self.sheet.write(self.book_row, 15, a["channelname"]) 138 | self.sheet.write(self.book_row, 16, a["source"]) 139 | self.sheet.write(self.book_row, 17, a["imgurl"]) 140 | 141 | 142 | 143 | self.book_row = self.book_row + 1 144 | 145 | 146 | 147 | class yangshi(QThread): 148 | result_thread = pyqtSignal(dict) 149 | error_thread = pyqtSignal(str) 150 | state_thread = pyqtSignal(bool) 151 | msg_thread = pyqtSignal(str) 152 | img_thread = pyqtSignal(int) 153 | 154 | def __init__(self, parent=None): 155 | super(yangshi, self).__init__(parent) 156 | 157 | self.headers = { 158 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' 159 | } 160 | 161 | self.dicts = { 162 | "要闻": "https://temp.163.com/special/00804KVA/cm_yaowen.js?callback=data_callback", 163 | "国内": "https://temp.163.com/special/00804KVA/cm_guonei.js?callback=data_callback", 164 | "国际": "https://temp.163.com/special/00804KVA/cm_guoji.js?callback=data_callback", 165 | "独家": "https://temp.163.com/special/00804KVA/cm_dujia.js?callback=data_callback", 166 | "军事": "https://temp.163.com/special/00804KVA/cm_war.js?callback=data_callback", 167 | "财经": "https://temp.163.com/special/00804KVA/cm_money.js?callback=data_callback", 168 | "科技": "https://temp.163.com/special/00804KVA/cm_tech.js?callback=data_callback", 169 | "体育": "https://temp.163.com/special/00804KVA/cm_sports.js?callback=data_callback", 170 | "娱乐": "https://temp.163.com/special/00804KVA/cm_ent.js?callback=data_callback", 171 | "时尚": "https://temp.163.com/special/00804KVA/cm_lady.js?callback=data_callback", 172 | "汽车": "https://temp.163.com/special/00804KVA/cm_auto.js?callback=data_callback", 173 | "房产": "https://temp.163.com/special/00804KVA/cm_houseshanghai.js?callback=data_callback", 174 | "航空": "https://temp.163.com/special/00804KVA/cm_hangkong.js?callback=data_callback", 175 | "健康": "https://temp.163.com/special/00804KVA/cm_jiankang.js?callback=data_callback" 176 | } 177 | 178 | def setidentity(self, dict): 179 | self.working = True 180 | self.identity = dict 181 | self.now = 0 182 | self.all = len(self.identity["5"]) 183 | print(dict) 184 | 185 | def show_text(self, text:str): 186 | self.error_thread.emit(text) 187 | # print(text) 188 | 189 | def show_msg(self, text): 190 | self.msg_thread.emit(text) 191 | 192 | def show_img(self, text): 193 | self.img_thread.emit(text) 194 | 195 | def final_data(self, dict): 196 | self.result_thread.emit(dict) 197 | # print(dict) 198 | 199 | def break_work(self): 200 | self.show_text("正在中止程序...") 201 | self.working = False 202 | 203 | def get_text(self, url:str): 204 | i = 1 205 | try: 206 | response = requests.get(url, headers=self.headers, verify=True, timeout=2) 207 | except: 208 | try: 209 | response = requests.get(url, headers=self.headers, verify=True, timeout=2) 210 | except: 211 | try: 212 | response = requests.get(url, headers=self.headers, verify=True, timeout=2) 213 | except: 214 | i = 0 215 | if i == 1: 216 | response.encoding = response.apparent_encoding 217 | text = response.text 218 | return text 219 | else: 220 | return None 221 | 222 | def crawl(self, keyword): 223 | if self.working: 224 | url = self.dicts[keyword] 225 | # self.show_text("正在爬取关键字: " + keyword) 226 | self.show_msg("关键字: " + keyword ) 227 | self.show_img(int(self.now/self.all*100)) 228 | self.now = self.now+1 229 | text = self.get_text(url) 230 | if text: 231 | a = re.findall(".*?\((.*)\)", text, re.S)[0] 232 | a = str(a).replace("\n","").replace(" ","") 233 | try: 234 | a = eval(a) 235 | print(a) 236 | for ii in a: 237 | while len(ii["keywords"]) < 3: 238 | ii["keywords"].append({'akey_link': '', 'keyname': ''}) 239 | ii["分类"] = keyword 240 | self.final_data(ii) 241 | except: 242 | self.show_text("关键字:" + str(keyword) + "出错,请求返回格式有误") 243 | else: 244 | self.show_text("关键字:" + str(keyword) + "爬取出错,无法访问该网址") 245 | 246 | def run(self): 247 | for i in range(len(self.identity["5"])): 248 | if self.working: 249 | self.show_text("正在爬取关键字: "+str(self.identity["5"][i])+" 关键字进度: "+str(i+1)+" / "+str(len(self.identity["5"]))) 250 | # self.crawl(self.identity["key"][i], self.identity["page1"], self.identity["page2"]) 251 | self.crawl(self.identity["5"][i]) 252 | else: 253 | break 254 | self.state_thread.emit(False) 255 | if self.working: 256 | self.error_thread.emit("爬取完成") 257 | self.img_thread.emit(100) 258 | else: 259 | self.error_thread.emit("已中止程序") 260 | 261 | if __name__ == "__main__": 262 | app = QApplication(sys.argv) 263 | # app.setStyleSheet(qdarkstyle.load_stylesheet()) 264 | form = ChildWindow() 265 | form.show() 266 | sys.exit(app.exec_()) -------------------------------------------------------------------------------- /网易新闻.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:网易新闻爬虫 2 | 网页主站:https://news.163.com/ 3 | 爬取站点(示例):https://temp.163.com/special/00804KVA/cm_guonei.js?callback=data_callback 4 | 提取数量:分类 * 70 (分类上限暂定14,根据具体筛选条件而定) 5 | 爬取方式:分类 6 | 关键字:无 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:如有其他功能需求请联系我进行更新。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /美团.txt: -------------------------------------------------------------------------------- 1 | 爬取内容:美团店铺 2 | 网页主站:https://www.meituan.com/ 3 | 爬取站点(示例):https://cd.meituan.com/meishi/ 4 | 提取数量:页码 * 15 (页码上限暂定150,根据具体筛选条件而定) 5 | 爬取方式:分类 6 | 关键字:无 7 | 支持批量关键字:否 8 | 9 | ip访问频率限制:暂无 10 | 网站反爬策略:暂无 11 | 12 | 注意:目前只更新了成都市所有区域的分类,如有其他地方需求请联系我更新。 13 | 14 | 更新:暂无。 -------------------------------------------------------------------------------- /说明.txt: -------------------------------------------------------------------------------- 1 | 1:本软件使用需连接互联网 2 | 3 | 2:本软件所有Excel导入的操作,均需将Excel文件后缀更改为xls(如:案列.xlsx 需更改为 案例.xls) 4 | 5 | 3:由于网站随时可能更新参数,数据展示方式,反爬策略等,会导致软件该网站无法爬取数据,请与我联系。 6 | 7 | 4:本软件目前处于测试阶段,很可能会出现特定情况下程序崩溃或卡死,请与我联系。 8 | 9 | 5:如有某一网站数据提取需求,或对现有功能希望改进,也请与我联系!!!! 10 | 11 | 6:使用软件爬取的数据仅作为统计学术研究,请勿商用。 12 | 13 | 7:联系方式:QQ 746643780 --------------------------------------------------------------------------------