首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用QUrl

不能使用QUrl
EN

Stack Overflow用户
提问于 2017-11-08 07:21:58
回答 1查看 1.8K关注 0票数 1

我正在努力学习PyQt5上的动态网络抓取。我正在查找用于PyQt4的教程,所以在Qt5中有一些不同的库。

代码语言:javascript
复制
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEnginePage
import bs4 as bs
import urllib.request

class Client(QWebEnginePage):
    def _init_(self, url):
        self.app=QApplication(sys.argv)
        QWebPage._init_(self)
        self.loadFinished.connect(self.on_page_load)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()
    def on_page_load(self):
        self.app.quit()

url='https://pythonprogramming.net/parsememcparseface/'
client_response=Client(url)
source=client_response.mainFrame().toHtml()

#sauce=urllib.request.urlopen('https://pythonprogramming.net/sitemap.xml').read()
soup=bs.BeautifulSoup(sauce,'xml')
js_test=soup.find('p',class_='jstest')
print(js_test.text)

正在显示以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "jsp.py", line 19, in <module>
    client_response=Client(url)
TypeError: arguments did not match any overloaded call:
  QWebEnginePage(parent: QObject = None): argument 1 has unexpected type 'str'
  QWebEnginePage(QWebEngineProfile, parent: QObject = None): argument 1 has unexpected

谁来帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 07:40:52

您的代码有几个错误:

  • init必须在前后有两个下划线。
  • QWebEnginePage没有mainFrame()作为方法,现在必须直接加载它。
  • 出现的另一个变化是,toHtml()函数不再是同步的,因此它将要求您进行回调以获得html,但经过我的修改,它再次同步。

代码:

代码语言:javascript
复制
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl, pyqtSignal, QEventLoop
from PyQt5.QtWebEngineWidgets import QWebEnginePage

class Client(QWebEnginePage):
    toHtmlFinished = pyqtSignal()

    def __init__(self, url):
        self.app=QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.loadFinished.connect(self.on_page_load)
        self.load(QUrl(url))
        self.app.exec_()

    def on_page_load(self):
        self.app.quit()

    def store_html(self, html):
        self.html = html
        self.toHtmlFinished.emit()

    def get_html(self):
        self.toHtml(self.store_html)
        loop = QEventLoop()
        self.toHtmlFinished.connect(loop.quit)
        loop.exec_()
        return self.html

url='https://pythonprogramming.net/parsememcparseface/'
client_response=Client(url)
source=client_response.get_html()

print(source)

参考文献:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47173791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档