Python爬虫+GUI界面实训作业

前言

Python爬虫+GUI界面实训作业 标题写的很清楚
之前就感兴趣爬虫,也了解、实操过
但一旦涉及作业、实训,自己最近就做的很烂,但还是记录一下,可能有人用得到
确实水
参考:
Python3 网络爬虫 2 小时简单入门 实战 1—— 爬取豆瓣 Top250
本来是生成csv文件,GPT又写了一个GUI的py文件

介绍

Python爬虫程序的实现:完成豆瓣电影TOP250网站(豆瓣电影 Top 250 (douban.com))的内容爬取,首先保存为csv文件,其次设计GUI程序,使用户直接运行程序即可查看豆瓣电影列表。

可以直接忽略下面的,因为自己实际上是copy的网上爬虫代码,然后让GPT加上GUI而已。

  1. 使用 requests 库发送 HTTP 请求,获取豆瓣电影 TOP250 页面的 HTML 文档;
  2. 使用 lxml 库解析 HTML 文档,提取电影排名、名称、演员信息、评分、评论数、经典台词和详情页链接等数据;
  3. 将提取到的数据保存到字典中,并使用 pandas 库将字典转换为 DataFrame;
  4. 将 DataFrame 保存为 CSV 文件;
  5. 使用 tkinter 库创建 GUI 程序,显示 CSV 文件的数据;
  6. 在 GUI 程序中使用 ttk.Treeview 控件显示 CSV 文件的数据,并添加滚动条和样式;
  7. 使用 CsvViewer 类封装 GUI 程序的相关操作,包括显示 CSV 文件数据、设置样式等;
  8. 在主程序中创建 CsvViewer 对象,并传入 CSV 文件名,启动 GUI 程序。

示例截图

在这里插入图片描述
在这里插入图片描述

代码

import requests
import tkinter as tk
from tkinter import ttk

#csv美化程序
class CsvViewer:
    def __init__(self, window, filename):
        self.window = window
        self.window.title('CSV Viewer')
        self.window.geometry('800x500')

        # 设置样式
        style = ttk.Style()
        style.configure('My.Treeview', font=('Microsoft YaHei', 14))

        self.frame_top = tk.Frame(self.window)
        self.frame_top.pack(side='top')

        self.label_filename = tk.Label(self.frame_top, text=f'豆瓣电影TOP250爬取: {filename}')
        self.label_filename.pack(side='left', padx=10, pady=10)

        self.frame_bottom = tk.Frame(self.window)
        self.frame_bottom.pack(side='bottom', padx=10, pady=10)

        self.scrollbar_y = tk.Scrollbar(self.frame_bottom)
        self.scrollbar_y.pack(side='right', fill='y')

        # 使用样式创建控件
        self.treeview_data = ttk.Treeview(self.frame_bottom, columns=[], yscrollcommand=self.scrollbar_y.set, style='My.Treeview')
        self.treeview_data.heading('#0', text='')
        self.treeview_data.column('#0', width=0, stretch=False)
        self.treeview_data.config(height=10)
        self.treeview_data.configure(yscrollcommand=self.scrollbar_y.set)
        self.treeview_data.pack(side='left', fill='both', expand=True)

        self.scrollbar_y.config(command=self.treeview_data.yview)

        self.load_data(filename)

    def load_data(self, filename):
        try:
            df = pd.read_csv(filename)
            columns = list(df.columns)
            self.treeview_data['columns'] = columns
            for col in columns:
                self.treeview_data.heading(col, text=col)
                self.treeview_data.column(col, width=120)
            for i, row in df.iterrows():
                values = [str(row[col]) for col in columns]
                self.treeview_data.insert('', i, values=values)
        except Exception as e:
            tk.messagebox.showerror('Error', str(e))

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
}
res = requests.get(url='https://movie.douban.com/top250',headers=headers)
# res.text

from lxml import etree
html = etree.HTML(res.text) # 使用 lxml 库解析 HTML 文档
rank_num = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/em/text()')# 提取电影排名
movie_name = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')# 提取电影名称
actors = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[1]') # 提取电影演员信息
actors = [i.strip() for i in actors]# 去除演员信息中的空格
scores = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()') # 提取电影评分
comments = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[4]/text()')# 提取电影评论数
comments = [i.strip('人评价') for i in comments] # 去除评论数中的“人评价”字样
inq = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')# 提取电影经典台词
details_url = html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/@href')# 提取电影详情页链接
datas = {
    'rank_num': rank_num,
    'movie_name': movie_name,
    'actors': actors,
    'scores': scores,
    'comments': comments,
    'inq': inq,
    'details_url': details_url
} # 将提取到的数据保存到字典中
# datas

import pandas as pd

df = pd.DataFrame(datas)# 将字典转换为 DataFrame
# df

df.to_csv('datas.csv', index=False) #将 DataFrame 保存为 CSV 文件,不保留行索引

if __name__ == '__main__':
    filename = 'datas.csv'
    window = tk.Tk()
    viewer = CsvViewer(window, filename)# 创建 CsvViewer 对象,并传入文件名
    window.mainloop()# 进入主循环,等待用户操作界面

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值