【Python】-实例:爬取热搜数据

爬取百度热搜的实例

直接上代码

import tkinter as tk  
from tkinter import messagebox  
import requests  
from bs4 import BeautifulSoup  
  
def fetch_data_from_url(url):  
    try:  
        response = requests.get(url)  
        response.raise_for_status()  # 确保请求成功  
        soup = BeautifulSoup(response.text, 'html.parser')  
          
        # 找到所有具有特定类的div元素  
        category_divs = soup.find_all('div', class_='category-wrap_iQLoo horizontal_1eKyQ')  
          
        # 遍历这些div元素,并找到嵌套元素的innerHTML  
        results = []  
        for div in category_divs:  
            content_div = div.find('div', class_='content_1YWBm')
            hot_num = div.find('div', class_='hot-index_1Bl1a')
            if content_div:  
                a_tag = content_div.find('a')  
                if a_tag:  
                    text_div = a_tag.find('div', class_='c-single-text-ellipsis')  
                    if text_div:  
                        results.append('热搜主题:'+text_div.get_text(strip=True))
            if hot_num:
                results.append('热搜指数:'+hot_num.get_text(strip=True))

            
        # 换行输出所有结果  
        return '\n'.join(results)  
      
    except (requests.RequestException, Exception) as e:  
        print(f"发生错误: {e}")  
        return None  
  
def on_fetch_data():  
    url = entry_url.get()  
    if not url:  
        messagebox.showerror("错误", "请输入有效的网址!")  
        return  
      
    data = fetch_data_from_url(url)  
    if data:  
        result_text.delete('1.0', tk.END)  # 清空文本框内容  
        result_text.insert(tk.END, data)  # 插入新数据  
    else:  
        result_text.insert(tk.END, "无法获取数据,请检查网址或稍后重试。")  
  
# 创建主窗口  
root = tk.Tk()  
root.title("获取网页数据")
root.geometry("400x400")  # 设置窗口大小
  
# 创建标签和文本框用于输入网址  
label_url = tk.Label(root, text="请输入网址:")  
label_url.pack()  
entry_url = tk.Entry(root,width=100)  
entry_url.pack()  
  
# 创建按钮用于获取数据  
button_fetch = tk.Button(root, text="获取数据", command=on_fetch_data)  
button_fetch.pack()  
  
# 创建文本框用于显示结果  
result_text = tk.Text(root, height=20, width=100)  # 调整高度和宽度以适应更多内容  
result_text.pack()  
  
# 运行主循环  
root.mainloop()

在这个代码中,我们定义了一个 fetch_data_from_url 函数,它使用 BeautifulSoup 来解析网页并找到所有具有指定类的 div 元素。然后,它遍历这些 div 元素,查找嵌套的 a 标签和 div.c-single-text-ellipsis,并获取它们的文本内容。最后,它使用换行符 \n 将所有结果连接成一个字符串并返回。

在图形用户界面部分,我们使用了 tk.Text 控件来显示多行文本结果,而不是使用 tk.Label。这样,即使结果很长,也能在文本框中完整显示。在 on_fetch_data 函数中,我们先清空文本框的内容,然后插入新的结果。

请确保替换代码中的类名为网页中实际的类名,因为这些类名可能会根据网页的具体结构而有所不同。如果网页结构发生变化,你可能需要更新选择器以匹配新的结构。

注意,请遵守相关法律法规,以及网站相关规定,合法爬取数据

运行效果

在这里插入图片描述
上面就是我们爬取到的运行结果了,可以直接将上述代码作为后台服务,定时采集数据,存入我们自己的的业务数据库,就可以服务于不同的功能模块了。

相关推荐

  1. python 接口数据

    2024-03-10 22:02:04       56 阅读
  2. Python-数据(爬虫)

    2024-03-10 22:02:04       22 阅读
  3. Python-数据(爬虫)

    2024-03-10 22:02:04       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 22:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 22:02:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 22:02:04       82 阅读
  4. Python语言-面向对象

    2024-03-10 22:02:04       91 阅读

热门阅读

  1. Pytest教程:Pytest的跳过与标记功能用法

    2024-03-10 22:02:04       39 阅读
  2. C#拾遗补漏之goto跳转语句

    2024-03-10 22:02:04       48 阅读
  3. GRU-深度学习循环神经网络情感分类模型搭建

    2024-03-10 22:02:04       47 阅读
  4. 学习数据结构和算法的地13天

    2024-03-10 22:02:04       39 阅读
  5. 函数柯里化(function currying)及部分求值

    2024-03-10 22:02:04       47 阅读
  6. vue中常用的指令和自定义指令

    2024-03-10 22:02:04       40 阅读
  7. 打印前端代码

    2024-03-10 22:02:04       46 阅读
  8. [leetcode] 283. 移动零

    2024-03-10 22:02:04       45 阅读
  9. 我耀学IT—day06-导航栏

    2024-03-10 22:02:04       34 阅读
  10. 用spark读取及存储数据

    2024-03-10 22:02:04       45 阅读
  11. Gson(List<Object>转String 、String转List<Object>)

    2024-03-10 22:02:04       43 阅读
  12. 手机中常用的传感器

    2024-03-10 22:02:04       41 阅读
  13. vuej介绍

    2024-03-10 22:02:04       49 阅读
  14. 常见的排序算法-(字解版)

    2024-03-10 22:02:04       45 阅读