【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 函数中,我们先清空文本框的内容,然后插入新的结果。

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

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

运行效果

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

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前鼻音太阳熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值