基于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()
|