编写Python脚本,在运行JavaScript后抓取网页。我意识到我需要运行JS,因为使用Requests并没有返回任何数据。我找到了似乎是我的解决方案here,但我仍然遇到了一些问题。
首先,该教程使用PyQt4,我已经从项目解释器安装并尝试了多个版本的PyQt 4和5,但仍无法找到解决方案。以下是相关代码:
import PyQt5.QtWebEngineWidgets
import PyQt5.QtCore
import PyQt5.QtWebEngine
import PyQt5.QtWebEngineCore
class Render(QWebpage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _load_finished(self, result):
self.frame = self.mainFrame()
self.app.quit()
QWebpage,QApplication和QUrl调用都有' Unresolved Reference'错误,四个PyQt5导入语句也都有未使用的导入语句'适应症。我已经尝试了几个小时来解决这些问题,多次卸载并重新安装PyQt并搜索互联网
任何建议都很棒,谢谢!
答案 0 :(得分:1)
你的导入是不正确的,在python中有很多方法可以做到:在你的情况下你可能是这样的:
1。from package import class
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWebKitWidgets import QWebPage
from PyQt5.QtWidgets import QApplication
# Take this class for granted.Just use result of rendering.
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()
url = 'http://pycoders.com/archive/'
r = Render(url)
result = r.frame.toHtml()
print(result)
import package
,那么您应该将每个元素用作package.class
:import sys
from PyQt5 import QtWebKitWidgets, QtCore, QtWidgets
class Render(QtWebKitWidgets.QWebPage):
def __init__(self, url):
self.app = QtWidgets.QApplication(sys.argv)
QtWebKitWidgets.QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QtCore.QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()
url = 'http://pycoders.com/archive/'
r = Render(url)
result = r.frame.toHtml()
print(result)
如果您正在使用pycharm,pycharm会以一种非常简单的方式为您正确导入包,为此您必须将点放在生成错误的单词上方并执行Ctrl+M
注意:如果您使用的是Windows,那么您将无法使用这些模块,因为Qt和PyQt使用了铬,而且它们似乎与Windows有关。