Python,Tkinter里运行爬虫程序

Python,Tkinter里运行爬虫程序实例

前言
爬取今日热榜里某个模块的数据
截图如下:

在这里插入图片描述

在这里插入图片描述

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d32dcd23740747f18579d6063bda3b50.png

一、话不多说,直接上代码

代码如下(示例):

from tkinter import *
from tkinter.scrolledtext import ScrolledText
import re
import requests
from bs4 import BeautifulSoup
import time

"""
放在tkinter里运行的爬虫程序如何终止?
在Tkinter应用中终止一个爬虫程序,你可以使用一个全局变量作为标志位,然后在爬虫的循环中检查这个标志位。如果标志位指示停止爬虫,你可以抛出一个异常来终止循环。
"""
# 全局标志位(用于终止爬虫)
running = True
start_time = time.time()  # 记录开始时间

# 实时更新提示框数据
def set_value(data):
    tip.delete(0, END)  # 清空现有的文本
    tip.insert(0, data)  # 插入新的文本
    tip.update()  # 立即更新(如果不更新的话是会等程序执行完再一次性更新的)


def getData():
    global running
    try:
        set_value("-------------------开始获取数据------------------------")
        # 获取数据前清空现有文本
        clearBox()

        url = "https://tophub.today/"
        head = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        }
        resp = requests.get(url, headers=head)
        resp.encoding = "utf-8"
        """
        1.把页面源代码交给BeautifulSoup进行处理,生成bs对象
        2.从bs对象中查找数据
        find(标签,属性=)
        find_all(标签,属性=)
        class是关键字,用class_
        """

        page = BeautifulSoup(resp.text, "html.parser")  #
         # 查找包含特定文本的div
        # search_text = "懂球帝"
        search_text = ent.get()
        print(search_text)
       
        div_containing_text = page.find("span", string=search_text).parent.parent.parent.parent.next_sibling.next_sibling
        all_a = div_containing_text.find_all("a")  # 找到所有a标签
        # 循环a标签
        zidian = {}
        for item in all_a:
            href = item.get("href")
            title = item.find("span", class_="t").text
            zidian = {"title": title, "url": href}

            # 执行数据插入
            tit = str(zidian) + '\n'
            txt.insert(END, tit)  # 插入最后一行
            txt.see(END)  # 跳转到最后一行

            set_value(tit)
            time.sleep(1)

            # 终止爬虫
            if not running:
                break   # 当标志位为False时,终止爬虫

        end_time = time.time()  # 记录结束时间
        execution_time = end_time - start_time  # 计算执行时间
        print(f"函数执行时间: {execution_time}秒")
        set_value(f"---------全部爬取完成--------------用时:{execution_time}秒")
    except Exception as e:
        set_value(f"An error occurred: {e}")
        # 处理所有异常的代码
        print(f"An error occurred: {e}")


def clearBox():
    txt.delete("1.0", "end")  # 清空内容


def func2(event):
    """当鼠标点击ent时,清除掉默认值"""
    if ent.get() == '请输入话题':
        ent.delete('0', 'end')  # 做这个判断,是为了避免清除用户自己输入的数据


# 终止程序
def stopGet():
    global running
    running = False


root = Tk()
root.title('测试')
root.geometry('780x530+400+200')
# root.resizable(0,0)  # 禁止改变窗体大小
# 创建一个frame
frame_head = Frame(root)
frame_head.grid(row=0, column=0)

# 左边标签
label = Label(frame_head, text="请输入:", font=("华文行楷", 17), width=8)
label.grid(row=0, column=0)
# 中间输入框
# 创建一个StringVar对象,用于存储文本框的内容
text_var = StringVar()
text_var.set("请输入话题")
ent = Entry(frame_head, width=47, font=("隶书", 17), textvariable=text_var, foreground='blue', relief='groove')
ent.grid(row=0, column=1, columnspan=2, sticky=N + S, pady=10, ipady=4)
ent.bind('<Button-1>', func2)
# 右边按钮

btn_get = Button(frame_head, text='爬取', font=("隶书", 15), width=8, command=getData)
btn_get.grid(row=0, column=3, padx=10)

# 这里插入一个提示框
tip = Entry(frame_head, width=102, background='lightgray')
tip.grid(row=1, column=0, columnspan=4, pady=5, ipady=10)
set_value("-------------------准备就绪------------------------")
# 中间
txt = ScrolledText(frame_head, height=28, width=100)
txt.grid(row=2, columnspan=4)

# 底部按钮
btn_clear = Button(frame_head, text='清空', font=("隶书", 15), command=clearBox)
btn_clear.grid(row=3, column=0, columnspan=2, pady=10, ipadx=10)

btn_quit = Button(frame_head, text='终止', bg='gray', font=("隶书", 15), command=stopGet)
btn_quit.grid(row=3, column=2, pady=10, ipadx=10)

root.mainloop()

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python tkinter爬虫是使用Python中的tkinter库来开发图形化界面的爬虫程序。使用tkinter库可以方便地创建窗口,并在窗口中添加各种控件,如文本框、按钮、进度条等,以实现用户友好的界面交互。爬虫部分可以使用Python的相关库来进行网页爬取、数据提取等操作。这样用户可以通过图形化界面来输入爬取的目标网址、设置爬取参数,并直观地查看爬取结果。有关如何使用tkinter开发爬虫程序的详细教程和示例可以参考和的资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python tkinter库窗口化爬虫](https://blog.csdn.net/qq_44924407/article/details/109251425)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [使用 Tkinter 写一个爬虫的辅助软件——HTTP测试工具(Python)](https://blog.csdn.net/qq_39832685/article/details/123694657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值