Python实现百度搜索:支持滚动加载和指定页数爬取

想要用Python实现一个简单的百度搜索工具吗?这篇文章将带你一步步实现,并加入滚动加载和指定爬取页数的功能,让你可以更方便地获取搜索结果。

代码实现pythonimport requestsfrom bs4 import BeautifulSoupimport timeimport tkinter as tkimport webbrowserimport random

def get_random_user_agent(): user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36', ] return random.choice(user_agents)

def crawl_baidu(keyword, page_limit): headers = { 'User-Agent': get_random_user_agent() }

results = []    for page in range(1, page_limit + 1):        url = f'https://www.baidu.com/s?wd={keyword}&pn={(page - 1) * 10}'                # 添加随机延迟        delay = random.uniform(0.5, 1.0)        time.sleep(delay)

    response = requests.get(url, headers=headers)        soup = BeautifulSoup(response.text, 'html.parser')

    for result in soup.find_all('div', class_='result'):            result_title = result.find('h3').get_text()            result_url = result.find('a')['href']            results.append((result_title, result_url))

return results

def open_url(url): webbrowser.open(url)

def search(): keyword = entry.get() page_limit = int(entry_pages.get()) # 获取指定的爬取页数 search_results = crawl_baidu(keyword, page_limit) if len(search_results) > 0: for index, (title, url) in enumerate(search_results, start=1): result_text.insert(tk.END, f'{index}. {title} ', 'title') result_text.insert(tk.END, url, 'link') result_text.tag_configure('link', foreground='blue', underline=True) result_text.tag_bind('link', '', lambda event, url=url: open_url(url)) result_text.insert(tk.END, ' ') result_text.insert(tk.END, ' ') 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()

label_pages = tk.Label(window, text='请输入爬取页数:')label_pages.pack()

entry_pages = tk.Entry(window)entry_pages.pack()

search_button = tk.Button(window, text='搜索', command=search)search_button.pack()

scrollbar = tk.Scrollbar(window)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

result_text = tk.Text(window, yscrollcommand=scrollbar.set)result_text.pack(fill=tk.BOTH)

scrollbar.config(command=result_text.yview)

window.mainloop()

代码解析

  1. 导入必要的库: requests 用于发送HTTP请求,BeautifulSoup 用于解析HTML,time 用于设置延迟,tkinter 用于创建图形界面,webbrowser 用于打开网页。2. get_random_user_agent 函数: 随机选择一个 User-Agent,避免被百度识别为爬虫。3. crawl_baidu 函数: 接收关键词和爬取页数作为参数,循环爬取百度搜索结果,并将标题和链接存储在列表中返回。4. open_url 函数: 使用 webbrowser 模块打开指定链接。5. search 函数: 获取用户输入的关键词和爬取页数,调用 crawl_baidu 函数获取搜索结果,并将结果显示在文本框中。6. UI界面: 使用 tkinter 创建简单的图形界面,包含输入框、按钮和文本框。

功能介绍

  • 用户可以在输入框中输入关键词和要爬取的页数。- 点击 “搜索” 按钮,程序会抓取百度搜索结果,并将结果显示在文本框中。- 搜索结果以链接形式展示,点击链接可以直接在浏览器中打开网页。

总结

这个简单的Python脚本可以帮助你快速实现一个带滚动加载和指定页数的百度搜索工具。你可以根据自己的需求修改代码,例如添加更多功能或优化代码效率。

Python实现百度搜索:支持滚动加载和指定页数爬取

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

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