【自制实用小工具】——1.XpathParser由于js脚本的影响,我们请求的数据往往和网页显示的数据不一样。但是chrome插件xpathhelper无法调试本地网页,所以萌生了做一个xpath解析器的想法。(粗略尝试一下,没有问题,如果发现bug请评论告诉我~)工具:PyQt5库Qtdesignersys库requests库lxml库步骤:(1)使用Qtdesigner设计界面(2)转换.ui文件.py文件中(1)和(2)部分的教程可以参考:https://www.jb51.net/article/...(3)链接按钮添加以下内容codebehinddefsetupUi#设置按钮控件self.button_Get_html.clicked.connect(self.Button_Get_Html)self.button_Xpath_Parse.clicked.connect(self.Button_Xpath_Parse)(4)按钮事件下面是button==GetHtml==的代码andbutton==XpathParse==:defButton_Get_Html(self):headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3970.5Safari/537.36'}url=self.text_Web_Site.toPlainText().strip()iflen(url):ifurl[0]=='w':url='http://'+urlsession=请求。session()尝试:res=session.get(url=url,headers=headers,verify=False).content.decode('utf-8','ignore')#在text_HTML_Code中输出和返回内容self.text_HTML_Code.setPlainText(res)除了Exceptionase:self.text_HTML_Code.setPlainText(e.__str__())else:self.text_HTML_Code.setPlainText('URLcannotbeempty!')defButton_Xpath_Parse(self):self.text_Result.document().clear()xpath_syntax=self.text_Xpath_Syntax.toPlainText()html_code=self.text_HTML_Code.toPlainText()html=etree.HTML(html_code)try:results=html.xpath(xpath_syntax)num=0forresult结果:self.text_Result.append('-'*60+'hereisthe'+str(num)+'th')#结果有两种格式try:self.text_Result.append(result.text)exceptException:self.text_Result.append(result)num=num+1exceptExceptionase:self.text_Result.setPlainText(e.__str__())(5)初始化接口if__name__=='__main__':#每个pyqt5应用必须创建一个应用对象sys.argv参数是一个列表,从命令行输入参数。app=QtWidgets.QApplication(sys.argv)#QWidget组件是pyqt5中所有用户界面对象的基类。它为QWidget提供默认构造函数。默认构造函数没有超类。w=QtWidgets.QWidget()ui=Ui_Asyu17_Xpath_Helper()ui.setupUi(w)w.show()#系统exit()方法确保应用程序干净退出#exec_()方法有下划线。因为execute是Python关键字。因此exec_()替换sys.exit(app.exec_())结果显示:测试无误后,可以使用pyinstaller将代码编译成可执行文件~代码:fromPyQt5importQtCore,QtGui,QtWidgetsimportsysimportrequestsfromlxmlimportetreerequests.packages.urllib3.disable_warnings()classUi_Asyu17_Xpath_Helper(object):defsetupUi(self,Asyu17_Xpath_Helper):Asyu17_Xpath_Helper.setObjectName("Asyu17_Xpath_Helper")Asyu17_Xpath_Helper.resize(969,905)self.button_Xpath_Parse=QtWidgets.QPushButton(Asyu17_Xpath_Helper)自我。button_Xpath_Parse.setGeometry(QtCore.QRect(830,860,75,31))self.button_Xpath_Parse.setObjectName("button_Xpath_Parse")self.label=QtWidgets.QLabel(Asyu17_Xpath_Helper)self.label.setGeometry(QtCore.QRect(10,71),16))self.label.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label.setScaledContents(False)self.label.setObjectName("label")self.label_2=QtWidgets.QLabel(Asyu17_Xpath_Helper)self.label_2.setGeometry(QtCore.QRect(490,10,51,16))self.label_2.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_2.setScaledContents(False)self.label_2.setObjectName("label_2")self.label_3=QtWidgets.QLabel(Asyu17_Xpath_Helper)self.label_3.setGeometry(QtCore.QRect(20,860,91,31))self.label_3.setObjectName("label_3")self.text_Xpath_Syntax=QtWidgets.QTextBrowser(Asyu17_Xpath_Helper)self.text_Xpath_Syntax。setGeometry(QtCore.QRect(110,860,681,31))font=QtGui.QFont()font.setFamily("宋体")font.setPointSize(13)self.text_Xpath_Syntax.setFont(font)self.text_Xpath_Syntax.setReadOnly(假)self.text_Xpath_Syntax.setObjectName("text_Xpath_Syntax")self.button_Get_html=QtWidgets.QPushButton(Asyu17_Xpath_Helper)self.button_Get_html.setGeometry(QtCore.QRect(830,820,75,31))self.button_Get_html.setObjectName("button_Get_html")self.text_Web_Site=QtWidgets.QTextBrowser(Asyu17_Xpath_Helper)self.text_Web_Site.setGeometry(QtCore.QRect(110,820,681,31))font=QtGui.QFont()font.setFamily("宋体")font.setPointSize(13)self.text_Web_Site.setFont(字体)self.text_Web_Site.setReadOnly(False)self.text_Web_Site.setObjectName("text_Web_Site")self.label_4=QtWidgets.QLabel(Asyu17_Xpath_Helper)self.label_4.setGeometry(QtCore.QRect(20),820,91,31))self.label_4.setObjectName("label_4")self.layoutWidget=QtWidgets.QWidget(Asyu17_Xpath_Helper)self.layoutWidget.setGeometry(QtCore.QRect(10,30,951,781))self.layoutWidget.setObjectName("layoutWidget")self.horizo??ntalLayout=QtWidgets.QHBoxLayout(self.layoutWidget)self.horizo??ntalLayout.setContentsMargins(0,0,0,0)self.horizo??ntalLayout.setObjectName("horizo??ntalLayout")self.text_HTML_Code=QtWidgets.QTextBrowser(self.layoutWidget)self.text_HTML_Code.setEnabled(True)font=QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.text_HTML_Code.setFont(字体)self.text_HTML_Code....layoutWidget)font=QtGui.QFont()font.setFamily("宋体")font.setPointSize(12)self.text_Result.setFont(font)self.text_Result.setReadOnly(False)self.horizo??ntalLayout.addWidget(self.text_Result)self.retranslateUi(Asyu17_Xpath_Helper)QtCore.QMetaObject.connectSlotsByName(Asyu17_Xpath_Helper)#设置按钮控件self.button_Get_html.clicked.connect(self.Button_Get_Html)self.button_Xpath_Parse.clicked.connect(self.Button_Xpath_Parse)defretranslateUi(self,Asyu17_Xpath_Helper):_translate=QtCore.QCoreApplication.translateAsyu17_Xpath_Helper.setWindowTitle(_translate(“Asyu17_Xpath_Helper”,“Asyu17Xpath_Xpath_Helper”))self.button_setText(_translate("Asyu17_Xpath_Helper","XpathParse"))self.label.setText(_translate("Asyu17_Xpath_Helper","HTML代码:"))self.label_2.setText(_translate("Asyu17_Xpath_Helper","结果:"))self.label_3.setText(_translate("Asyu17_Xpath_Helper","Xpath语法:"))self.button_Get_html.setText(_translate("Asyu17_Xpath_Helper","GetHtml"))self.label_4.setText(_translate("Asyu17_Xpath_Helper","网站:"))defButton_Get_Html(self):headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3970.5Safari/537.36'}url=self.text_Web_Site.toPlainText().strip()iflen(url):ifurl[0]=='w':url='http://'+urlsession=requests.session()尝试:res=session.get(url=url,headers=headers,verify=False).content.decode('utf-8','ignore')#在text_HTML_Code中输出返回内容self.text_HTML_Code.setPlainText(res)exceptException作为e:self.text_HTML_Code.setPlainText(e.__str__())else:self.text_HTML_Code.setPlainText('网址不能为空!')defButton_Xpath_Parse(self):self.text_Result.document().clear()xpath_syntax=self.text_Xpath_Syntax.toPlainText()html_code=self.text_HTML_Code.toPlainText()html=etree.HTML(html_code)尝试:results=html.xpath(xpath_syntax)num=0forresultinresults:self.text_Result.append('-'*60+'这里是第'+str(num)+'A')#结果有两种格式())if__name__=='__main__':#每个pyqt5应用程序都必须创建一个应用程序对象sys.argv参数是一个列表,从命令行输入参数。app=QtWidgets.QApplication(sys.argv)#QWidget组件是pyqt5中所有用户界面对象的基类。它为QWidget提供默认构造函数。默认构造函数没有超类。w=QtWidgets.QWidget()ui=Ui_Asyu17_Xpath_Helper()ui.setupUi(w)w.show()#系统exit()方法确保应用程序干净退出#exec_()方法有下划线。因为execute是Python关键字。因此,exec_()代替了sys.exit(app.exec_())==微信公众号:==
