tkinter+爬虫(re库,tkinter库详解)

该文介绍了如何利用Python的requests库进行网络爬虫,结合tkinter库创建GUI界面,实现用户输入URL后爬取网页内容。通过正则表达式匹配所需数据,并在带滚动条的多行文本框中显示。此外,文中还提供了清空文本框的功能。
摘要由CSDN通过智能技术生成

1.安装和认识本次实验所需要的库

re库(正则库,本次实验用于匹配文本)

tkinter库 (GUI库,用于制作可视化界面)

requests库 (网络请求库,用于制作爬虫)

re和tkinter均为python自带库无需安装

requests为第三方库需要自己安装

安装命令为: pip install requests  我这里已经安装好了

安装好后可用命令pip list查看

2.进行爬虫与GUI界面的编写

我们首先进行爬虫编写

def bue(): #创建函数bue
    url = ent.get() #获取GUI输入框输入的url
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0'} #UA伪装
    pink = requests.get(url=url,headers=headers) #请求
    pink.encoding = 'utf-8' #设置编码
    obj=re.compile(
                 r'<td align="center">(?P<ls>.*?)</td>.*?'
                 r'<td class="al"><a href=".*?" target="_blank" rel="nofollow" itemid=".*?">(?P<tist>.*?)</a></td>.*?'
		         r'<td>(?P<thousand>.*?)</td>'
               ,re.S)  #正则匹配需要的字符
    global s #设置s为全局变量
    s = obj.finditer(pink.text) #获取.text
    for it in s :
            tit = (it.groupdict(),"\n") #换行
            
            txt.insert(END,tit) #将爬取的数据写入GUI中的多行文本框
            txt.see(END)
    
def clearBox():              
    txt.delete("1.0", "end") #清除多行文本框文本

(?P<ls>.*?)

要匹配的文本
.*?换行匹配或贪婪匹配
\n用于爬取的文本换行

进行GUI界面编写

root = Tk()
root.title('测试') 
root.geometry('680x530+400+200') #设置长宽和出现位置

label = Label(root,text="请输入:",font=("华文行楷",17)) #设置输入框前面的文本
label.grid() #默认布局

ent = Entry(root, width=40,font=("隶书",17)) #设置输入框
ent.grid(row=0,column=1) #设置布局0排1列

btn1 = Button(root,text="爬取",font=("隶书",15),command=bue) #设置按钮并绑定函数bue
btn1.grid(row=0,column=2,padx=30) #设置布局0排2列,设置左右边距为30

txt = scrolledtext.ScrolledText(root, width=90,height=30) #设置带滚动条的多行文本框
txt.grid(row=1,columnspan=3,pady=25) #设置布局1排横跨3列,上下边距25

btn1 = Button(root, text="Quit",bg='red',font=("隶书",15),command=root.quit) #设置退出按钮
btn1.grid(row=2,column=2) #设置布局2排2列

btn2 = Button(root,text="清空",bg='green',font=("隶书",15),command=clearBox) #设置清空按钮,并绑定clearBox函数
btn2.grid(row=2,column=0) #设置布局2排0列 

root.mainloop()
row设置控件排
column设置控件列
colimnpady设置控件跨列
pady设置控件上下边距
padx设置控件左右边距

一定要设置边距,不然控件会挤在一起非常不美观

完整代码

import re
import requests
from tkinter import *
from tkinter import scrolledtext

def bue():
   
    url = ent.get()
    
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0'}
    pink = requests.get(url=url,headers=headers)
    pink.encoding = 'utf-8'
    obj=re.compile(
                 r'<td align="center">(?P<ls>.*?)</td>.*?'
                 r'<td class="al"><a href=".*?" target="_blank" rel="nofollow" itemid=".*?">(?P<tist>.*?)</a></td>.*?'
		         r'<td>(?P<thousand>.*?)</td>'
               ,re.S)
    global s
    s = obj.finditer(pink.text)

    for it in s :
            tit = (it.groupdict(),"\n")
            
            txt.insert(END,tit)
            txt.see(END)
    
def clearBox():              
    txt.delete("1.0", "end")

root = Tk()
root.title('测试')
root.geometry('680x530+400+200')

label = Label(root,text="请输入:",font=("华文行楷",17))
label.grid()

ent = Entry(root, width=40,font=("隶书",17))
ent.grid(row=0,column=1)

btn1 = Button(root,text="爬取",font=("隶书",15),command=bue)
btn1.grid(row=0,column=2,padx=30)

txt = scrolledtext.ScrolledText(root,width=90,height=30)
txt.grid(row=1,columnspan=3,pady=25)

btn1 = Button(root, text="Quit",bg='red',font=("隶书",15),command=root.quit)
btn1.grid(row=2,column=2)

btn2 = Button(root,text="清空",bg='green',font=("隶书",15),command=clearBox) 
btn2.grid(row=2,column=0)

root.mainloop()

运行结果

本次博客就完结了

如果有不懂的兄弟可以在评论区交流

下篇文章再见(希望三连)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中将jkx

一起努力吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值