python - 无法使用 PyQt5 获取 html
问题描述
我曾经PyQt5
得到html。
它工作正常。
但是,我无法获取网址的第二页。
我应该怎么办?
import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
class WebPage(QtWebEngineWidgets.QWebEnginePage):
def __init__(self):
super(WebPage, self).__init__()
self.loadFinished.connect(self.handleLoadFinished)
self.data = []
def start(self, urls):
self._urls = iter(urls)
self.fetchNext()
def fetchNext(self):
try:
url = next(self._urls)
except StopIteration:
return False
else:
self.load(QtCore.QUrl(url))
return True
def processCurrentPage(self, html):
url = self.url().toString()
self.data.append(html)
if not self.fetchNext():
QtWidgets.qApp.quit()
def handleLoadFinished(self):
self.toHtml(self.processCurrentPage)
if __name__ == '__main__':
urls = ['https://www.hello.com/p1', 'https://www.haha.com/p1']
app = QtWidgets.QApplication(sys.argv)
webpage = WebPage()
webpage.start(urls)
first_result = webpage.data #empty, why?
new_urls = [i for i in urls if needToGetHtml(i)]
webpage.start(new_urls)
sys.exit(app.exec_())
修改的:
if __name__ == '__main__':
urls = ['https://www.hello.com/p1', 'https://www.haha.com/p1']
app = QtWidgets.QApplication(sys.argv)
webpage = WebPage()
webpage.start(urls)
ret = app.exec_()
first_result = webpage.data
new_urls = [i for i in urls if needToGetHtml(i)]
webpage.start(new_urls)
ret = app.exec_()
second_result = webpage.data
sys.exit(ret)
解决方案
请记住,Qt 是异步的,因此根据您提供的代码,将在 eventloop 停止后获取数据:
if not self.fetchNext():
QtWidgets.qApp.quit()
所以你必须在app.exec_()
(你不应该使用sys.exit()
)之后获取数据:
if __name__ == '__main__':
urls = ['https://www.hello.com/p1', 'https://www.haha.com/p1']
app = QtWidgets.QApplication(sys.argv)
webpage = WebPage()
webpage.start(urls)
ret = app.exec_()
print(webpage.data)
sys.exit(ret)
推荐阅读
- r - 按给定的月份计算员工人数R中的开始日期和结束日期
- javascript - 提取 Catmull-Rom 样条曲线的每个控制点之间的坐标
- python - 使用 datetimefield 模型 django 过滤 MYSQL 拉取
- android - 为什么 android:margin="xxdp" 不能与 Android 中的 viewpager 一起使用?
- flutter - 如何在关闭应用程序之前显示确认弹出窗口?
- android - 我怎么知道安卓平板设备是否可以使用电话?
- c++ - 在声明c ++后将向量插入无序集中
- angular - Angular Auth Guard 未导航到新路由
- mysql - MySQL / AWS RDS:错误 2003 (HY000):无法连接到 MySQL 服务器
- node.js - mongodb 和 nodejs 的问题