【问题标题】:Cannot import QWebPage from PyQt5 in Python 3.5无法在 Python 3.5 中从 PyQt5 导入 QWebPage
【发布时间】:2016-08-25 13:43:06
【问题描述】:

我现在正在尝试编写一些代码来从一些 Java 呈现的页面中抓取 Web 内容。我使用 PyQt5 从网上找到了一些示例。但是,当我使用 PyQt5.5.7 安装 Python 3.5 但导入其模块失败时(ImportError: cannot import name 'QWebPage')。我附上了下面的代码以供参考。如果有人能建议如何解决这个问题,或者任何其他方法来废弃 Java 呈现的网页内容,我们将不胜感激。

# standard imports
import sys

# third-party imports
import requests
from bs4 import BeautifulSoup
from pyvirtualdisplay import Display
from PyQt5.QtWebEngineWidgets import QWebPage
from PyQt5.QtWidgets import QApplication



class Render(QWebPage):
    """Render HTML with PyQt5 WebKit."""

    def __init__(self, html):
        self.html = None
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)
        self.mainFrame().setHtml(html)
        self.app.exec_()

    def _loadFinished(self, result):
        self.html = self.mainFrame().toHtml()
        self.app.quit()


url = 'https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/'

# get the raw HTML
source_html = requests.get(url).text

# return the JavaScript rendered HTML
with Display(visible=0, size=(800, 600)):
    rendered_html = Render(source_html).html

# get the BeautifulSoup
soup = BeautifulSoup(rendered_html, 'html.parser')

print('title is %r' % soup.select_one('title').text)

【问题讨论】:

    标签: java python web-scraping


    【解决方案1】:

    QWebPage 是 PyQt4 中 QtWebKit 模块中的一个类。该模块已作为 PyQt5 的可选附加组件被弃用和分离。安装:

    pip install PyQtWebEngine
    

    QtWebKit 已被 QtWebEngineWidgets 取代,而相应的取代 QWebPage 的类是 QWebEnginePage。所以你应该说:

    from PyQt5.QtWebEngineWidgets import QWebEnginePage
    

    【讨论】:

      【解决方案2】:

      试试这个 从 PyQt5.QtWebKitWidgets 导入 QWebView,QWebPage

      【讨论】:

        猜你喜欢
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 2016-10-19
        • 1970-01-01
        • 2016-04-22
        相关资源
        最近更新 更多