小陈步吃人 2022-07-28 17:58 采纳率: 75%
浏览 33
已结题

PyQt5使用QWebEngineView渲染提取数据

在PyQt4中,使用QtWebKit中的QWebView渲染页面,得到原始的html,代码如下:

pp = QApplication([]) 
webview = QWebView() 
loop = QEventLoop() 
webview.loadFinished.connect(loop.quit) 
webview.load(QUrl(url)) 
loop.exec_() 
html = webview.page().mainFrame().toHtml()

但是PyQt5中使用QWebEngineView代替上述的QWebView,我怎么能使用QWebEngineView完成上面那样的获得源html呢?
如下,我的代码可以显示网页,但我怎么得到html文件呢?

url = 'http://example.python-scraping.com/dynamic'
    # html = download(url)
    app = QApplication([])

    webview = QWebEngineView()
    loop = QEventLoop()
    # webview.loadFinished.connect(loop.quit)
    webview.load(QUrl(url))
    webview.show()
    loop.exec_()

  • 写回答

2条回答 默认 最新

  • 小陈步吃人 2022-07-28 18:48
    关注

    已解决

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtWebEngineWidgets import QWebEngineView
    import requests
    import lxml.html
    
    
    class Render(QWebEngineView):  # 子类Render继承父类QWebEngineView
        def __init__(self, url):
            self.html = ''
            self.app = QApplication(sys.argv)
            super().__init__()
            self.loadFinished.connect(self._loadFinished)
            self.load(QUrl(url))
            self.app.exec_()
    
        def _loadFinished(self):
            self.page().toHtml(self.callable)
    
        def callable(self, data):
            self.html = data
            self.app.quit()
    
    
    if __name__ == '__main__':
        url = 'http://example.python-scraping.com/dynamic'
        r = Render(url)
        result = r.html
        tree = lxml.html.fromstring(result)
        a = tree.cssselect('#result')[0].text_content()
        print(a)
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么