PyQt4 to PyQt5, Красивый суп, Ядро умерло, перезапуск - PullRequest
2 голосов
/ 18 марта 2019

Я запускаю свежую установку Anaconda «Python 3.7.1 64-bit | Qt 5.9.6 | PyQt5 5.9.2 | Windows 10 | Spyder 3.3.2 ”и не повезло, портируя Youtube Sentdex« Динамическая очистка Javascript - веб-очистка с Beautiful Soup 4 p.4 », пример на PyQt5. Вы можете помочь? Большое спасибо!

import sys
from PyQt4.QtGui import QApplication 
from PyQt4.QtCore import QUrl
from PyQt4.QtWebKit import QWebPage  
import bs4 as bs

class Client(QWebPage):

    def _init_ (self, url):
        self.app = QApplication(sys.argv)
        #QWebPage.__init__(self)
        QWebEnginePage.__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()
soup = bs.BeautifulSoup(source, 'lxml')
js_test = soup.find('p', class_ = 'jstest')
print(js_test.text)
# output should be "Look at you shinin!"

1 Ответ

0 голосов
/ 23 марта 2019

PyQt4 to PyQt5 -> mainFrame () устарела, требуется исправить загрузку веб-страниц указывает решение, но я не могу приступить к работе.Может кто-нибудь подтвердить, что код работает с моей средой программирования или без нее?Спасибо!

import sys
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
import bs4 as bs

class Page(QWebEnginePage):
    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebEnginePage.__init__(self)
        self.html = ''
        self.loadFinished.connect(self._on_load_finished)
        self.load(QUrl(url))
        self.app.exec_()

    def _on_load_finished(self):
        self.html = self.toHtml(self.Callable)
        print('Load finished')

    def Callable(self, html_str):
        self.html = html_str
        self.app.quit()

def main():
    page = Page('https://pythonprogramming.net/parsememcparseface/')
    soup = bs.BeautifulSoup(page.html, 'html.parser')
    js_test = soup.find('p', class_='jstest')
    print(js_test.text)    #fixed
    # output should be "Look at you shinin!"

if __name__ == '__main__': main()
...