# serch_crawler **Repository Path**: lznode/serch_crawler ## Basic Information - **Project Name**: serch_crawler - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-21 - **Last Updated**: 2025-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 搜索爬虫项目 ## 项目概述 本项目是一个基于Python和Tkinter的搜索爬虫应用程序,主要用于处理关键词文本,通过多线程的方式进行搜索任务,同时支持代理IP的设置和定时刷新。该应用程序提供了一个图形用户界面(GUI),方便用户输入相关参数并启动搜索任务。 ## 功能特性 - **图形用户界面(GUI)**:使用Tkinter库创建一个简单直观的界面,方便用户输入关键词文本的路径、代理API、刷新代理IP的时间间隔等参数。 - **多线程处理**:利用`concurrent.futures`模块的`ThreadPoolExecutor`实现多线程处理,提高搜索任务的执行效率。 - **代理IP支持**:用户可以输入代理API,并且设置刷新代理IP的时间间隔,以避免IP被封禁。 - **日志输出**:在界面的右侧文本框中实时显示任务的执行进度和结果。 ## 项目结构 项目主要包含以下几个部分: - **`TkApp`类**:负责创建和管理GUI界面,处理用户输入和事件。 - `__init__`方法:初始化主窗口,设置窗口大小和位置,调用`setup_ui`和`bind_closing`方法。 - `setup_ui`方法:初始化和布局UI组件,包括左侧输入框和按钮,右侧输出文本框。 - `create_left_frame`方法:创建左侧框架,包含文件路径输入框、代理API输入框、刷新时间输入框等。 - `create_right_frame`方法:创建右侧框架,包含输出文本框和滚动条。 - `update_output`方法:更新输出文本框的内容。 - `run_my_code`方法:执行搜索任务,包括获取代理IP、打开关键词文件、启动定时刷新代理池的定时器、使用多线程处理关键词。 - `select_file`方法:打开文件选择对话框,选择关键词文本文件。 - `start_run_my_code`方法:启动一个新线程执行`run_my_code`方法。 - `bind_closing`方法:绑定窗口关闭事件。 - `on_closing`方法:处理窗口关闭事件。 - `start_app`方法:启动主循环,显示GUI界面。 ## 使用方法 1. 运行程序,会弹出一个窗口。 2. 在“请输入待处理关键词文本的路径”输入框中输入关键词文本文件的路径,或者点击“选择文件”按钮选择文件。 3. 在“代理APi”输入框中输入代理API的URL。 4. 在“多少秒刷新一次代理IP”输入框中输入刷新代理IP的时间间隔(单位:秒)。 5. 其他参数(如随机等待时间、最大重试次数、请求超时时间)根据需要进行设置。 6. 点击“开始”按钮,程序会开始执行搜索任务,任务完成后会在右侧文本框中显示“所有任务已完成”。 ## 依赖库 - `tkinter`:用于创建GUI界面。 - `concurrent.futures`:用于实现多线程处理。 - `os`:用于处理操作系统相关的操作。 - `filedialog`:用于打开文件选择对话框。 - `threading`:用于创建和管理线程。 ## 注意事项 - 请确保输入的代理API有效,否则可能会导致搜索任务失败。 - 在任务执行过程中,请勿关闭窗口,否则可能会导致程序异常退出。 ## 示例代码 以下是`run_my_code`方法的示例代码: ```python def run_my_code(self): ip_api_url = self.proxy_ip.get() scraper = BaiduScraper(ip_api_url) keywords = scraper.open_file_dialog(self.file_path_entry.get()) scraper.refresh_ip_pool_timed() # 启动定时刷新代理池的定时器 with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: futures = [executor.submit(scraper.process_keyword, keyword) for keyword in keywords] concurrent.futures.wait(futures) print("所有任务已完成") self.update_output("所有任务已完成") # 任务完成后,取消定时器 if scraper.timer: scraper.timer.cancel()