吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1012|回复: 16
收起左侧

[Python 原创] Python实现爬取豆瓣TOP250带GUI版

[复制链接]
jin2025 发表于 2025-4-8 11:56
基于requests和PySide6实现
[Python] 纯文本查看 复制代码
import re
import requests
import webbrowser
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit, QMessageBox, QTableWidget, \
    QTableWidgetItem
from PySide6.QtCore import Qt


class Stats(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(700, 400)
        self.move(300, 300)
        self.setWindowTitle('查询豆瓣Top250')

        self.textEdit = QLineEdit(self)
        self.textEdit.setPlaceholderText("请输入要查询的页码")
        self.textEdit.move(10, 25)
        self.textEdit.resize(150, 30)

        self.button = QPushButton('查询', self)
        self.button.move(185, 25)
        self.button.clicked.connect(self.handle_search)

        # 创建表格并添加到窗口
        self.table = QTableWidget(self)
        self.table.move(10, 75)
        self.table.resize(680, 300)
        self.table.setColumnCount(5)  # 设置列数
        self.table.setHorizontalHeaderLabels(['电影名称', '年份', '评分', '评价人数', 'URL'])  # 设置列标题
        self.tableHeader = self.table.horizontalHeader()
        self.tableHeader.setStretchLastSection(True)

        # 设置表格不可编辑
        self.table.setEditTriggers(QTableWidget.NoEditTriggers)

        # 连接单元格点击信号
        self.table.cellClicked.connect(self.open_url)

    def handle_search(self):
        text = self.textEdit.text()
        url = r'https://movie.douban.com/top250?start=' + text + '&filter='
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
        }

        try:
            response = requests.get(url, headers=headers)
            response.encoding = "utf-8"

            obj = re.compile(r'<div class="item">.*?<a href="(?P<url>.*?)">'
                             r'.*?<span class="title">(?P<name>.*?)</span>'
                             r'.*?<br>\s*(?P<year>.*?) / '
                             r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
                             r'.*?<span>(?P<num>.*?)人评价</span>', re.S)
            result = obj.findall(response.text)
            rows = len(result)

            self.table.setRowCount(rows)  # 设置行数

            for row, item in enumerate(result):
                self.table.setItem(row, 0, QTableWidgetItem(item[1].strip()))  # 电影名称
                self.table.setItem(row, 1, QTableWidgetItem(item[2]))  # 年份
                self.table.setItem(row, 2, QTableWidgetItem(item[3]))  # 评分
                self.table.setItem(row, 3, QTableWidgetItem(item[4]))  # 评价人数
                self.table.setItem(row, 4, QTableWidgetItem(item[0]))  # URL

                # 设置对齐方式为居中
                for col in range(5):  # 所有列
                    cell_item = self.table.item(row, col)
                    cell_item.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

            QMessageBox.information(
                self,
                '操作成功',
                f'成功查询 {rows} 条数据。')

        except Exception as e:
            QMessageBox.critical(self, '错误', f'查询失败: {str(e)}')

    def open_url(self, row, column):
        if column == 4:  # 检查是否在 URL 列
            url = self.table.item(row, column).text()
            if url:  # 确保 URL 不为空
                webbrowser.open(url)  # 打开浏览器


app = QApplication([])
stats = Stats()
stats.show()
app.exec()


软件界面

软件界面

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| jin2025 发表于 2025-4-8 11:57
输入需要爬取的页码即可
hsq123456HSQ 发表于 2025-4-9 12:59
mytomsummer 发表于 2025-4-9 15:22
joythinker 发表于 2025-4-9 15:48
学习了,,,,
Velociraptor 发表于 2025-4-11 19:40
长经验了
pO52jie6293 发表于 2025-4-11 23:21
感谢大佬,学习了
Zero0fBegin 发表于 2025-4-13 14:27

感谢分享学习了
hbyhzx 发表于 2025-4-17 10:32
感谢分享。
zsp20250313 发表于 2025-4-25 16:00
学习,已阅
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-7-13 03:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表