Python爬虫实战:打造简易百度搜索工具(已修复点击链接错误)

你在为寻找信息而烦恼吗?还在一遍遍复制粘贴关键词到浏览器吗?

今天就来学习如何使用Python,编写一个简易的百度搜索工具,一键获取搜索结果,提高效率!

项目目标

  • 使用Python爬取百度搜索结果
  • 通过Tkinter构建图形界面
  • 点击链接即可在浏览器中打开对应网页

所需工具

  • Python 3
  • requests库
  • BeautifulSoup库
  • Tkinter库

代码实现

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])
            if url:
                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 + '
', 'link')
            result_text.tag_configure('link', foreground='blue', underline=True)
            result_text.insert(tk.END, '
')
            result_text.insert(tk.END, '------------------------
')
            result_text.insert(tk.END, '
')
            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, '没有搜索结果
')

# 创建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()

代码解析

  1. 导入所需库:requests用于发送HTTP请求,BeautifulSoup用于解析HTML,time用于设置延迟,tkinter用于构建图形界面,webbrowser用于打开浏览器。
  2. 定义crawl_baidu(keyword)函数:该函数接收一个关键词作为参数,构造百度搜索链接,发送请求并解析HTML,提取搜索结果链接并返回。
  3. 定义open_url(event)函数:该函数用于处理链接点击事件,获取点击的链接并使用webbrowser.open()函数打开浏览器。
  4. 定义search()函数:该函数获取用户输入的关键词,调用crawl_baidu()函数获取搜索结果,并将结果显示在图形界面上,同时绑定链接点击事件。
  5. 创建图形界面:使用tkinter创建窗口、标签、输入框、按钮和文本框等界面元素,并进行布局。

总结

通过以上步骤,我们就完成了一个简易的百度搜索工具!

注意: 为了避免对百度服务器造成压力,请不要频繁使用该工具进行搜索。

希望这篇文章能帮助你学习Python爬虫和Tkinter图形界面编程。

如果你有任何问题或建议,欢迎在下方留言讨论!

Python爬虫实战:打造简易百度搜索工具(已修复点击链接错误)

原文地址: http://www.cveoy.top/t/topic/ozv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录