修复Python百度搜索程序错误:点击UI界面时触发链接
之前,程序存在一个错误,即只要点击UI界面,不管点没点击网址,都会触发open_url()函数。
这次修复了错误,并确保只有在点击链接文本时才会触发open_url()函数。现在,当用户点击链接时,将在默认浏览器中打开对应的网页。
以下是修复后的代码:
import requests
from bs4 import BeautifulSoup
import time
import tkinter as tk
import webbrowser
def crawl_baidu(keyword):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
url = f"https://www.baidu.com/s?wd={keyword}"
time.sleep(2) # 添加延迟
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
results = []
for result in soup.find_all("div", class_="result"):
result_url = result.find("a")["href"]
results.append(result_url)
return results
def open_url(event):
tag_ranges = result_text.tag_ranges("link")
click_index = event.widget.index(tk.CURRENT)
for index, tag_range in enumerate(tag_ranges):
if result_text.compare(click_index, ">=", tag_range[0]) and result_text.compare(click_index, "<", tag_range[1]):
url = result_text.get(tag_range[0], tag_range[1])
webbrowser.open(url)
break
def search():
keyword = entry.get()
search_results = crawl_baidu(keyword)
if len(search_results) > 0:
for url in search_results:
result_text.insert(tk.END, url + "\n", "link")
result_text.tag_configure("link", foreground="blue", underline=True)
result_text.insert(tk.END, "\n")
result_text.insert(tk.END, "------------------------\n")
result_text.insert(tk.END, "\n")
result_text.tag_add("link", tk.END + "-2l", tk.END)
result_text.tag_bind("link", "<Button-1>", open_url)
else:
result_text.insert(tk.END, "没有搜索结果\n")
# 创建UI界面
window = tk.Tk()
window.title("百度搜索")
window.geometry("800x600")
label = tk.Label(window, text="请输入关键词:")
label.pack()
entry = tk.Entry(window)
entry.pack()
search_button = tk.Button(window, text="搜索", command=search)
search_button.pack()
result_text = tk.Text(window)
result_text.pack()
window.mainloop()
非常抱歉之前的错误,感谢您的耐心和指正!如果还有其他问题,请随时提问。
原文地址: http://www.cveoy.top/t/topic/oyS 著作权归作者所有。请勿转载和采集!