我使用PyQt5来抓取网页,这对于http://网址非常有用,但对于https://网址则完全没有。
我的脚本的相关部分如下:
class WebPage(QWebPage):
def __init__(self):
super(WebPage, self).__init__()
self.timerScreen = QTimer()
self.timerScreen.setInterval(2000)
self.timerScreen.setSingleShot(True)
self.timerScreen.timeout.connect(self.handleLoadFinished)
self.loadFinished.connect(self.timerScreen.start)
def start(self, urls):
self._urls = iter(urls)
self.fetchNext()
def fetchNext(self):
try:
url = next(self._urls)
except StopIteration:
return False
else:
self.mainFrame().load(QUrl(url))
return True
def processCurrentPage(self):
url = self.mainFrame().url().toString()
html = self.mainFrame().toHtml()
#Do stuff with html
print('loaded: [%d bytes] %s' % (self.bytesReceived(), url))
def handleLoadFinished(self):
self.processCurrentPage()
if not self.fetchNext():
qApp.quit()
对于安全页面,脚本返回空白页面。唯一回来的html是<html><head></head><body></body></html>
。
我有点失落。我是否缺少与处理安全网址相关的设置?
答案 0 :(得分:1)
如果您使用的是Windows,请尝试以下操作: Build PyQt5 on Windows with OpenSSL support?
您是否考虑过使用Beautiful Soup或Scrapy.
我在项目中使用了Beautiful Soup,它就像一个魅力。它也有SSL支持。
答案 1 :(得分:0)
使用PyQt4进行测试,并使用HTTPS正常打开页面
import sys
from PyQt4.QtGui import QApplication
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebView
class Browser(QWebView):
def __init__(self):
QWebView.__init__(self)
self.loadFinished.connect(self._result_available)
def _result_available(self, ok):
frame = self.page().mainFrame()
print(frame.toHtml())
if __name__ == '__main__':
app = QApplication(sys.argv)
view = Browser()
view.load(QUrl('https://www.google.com'))
app.exec_()
答案 2 :(得分:0)
由于您的代码可以正常使用HTTP页面,但无法使用HTTPS,我认为这可能是由于SSL问题。
因此,请仔细检查您的PyQt5版本是否支持SSL ...(您可以找到有关下载,安装和设置openssl here的更多信息)
下载SSL库后您需要做的就是确保 Qt可以找到这些openSSL库的位置
你使用哪种操作系统? PyQt5是否支持SSL? Openssl已安装?