【问题标题】:Python : Use PyQT4 + Soup to scrape SEVERAL pages [duplicate]Python:使用 PyQT4 + Soup 抓取几个页面 [重复]
【发布时间】:2015-11-14 18:04:42
【问题描述】:

我正在尝试使用 Python PyQT4 + Beautiful Soup 抓取几个网页。

由于我整个程序的性质,我使用一个主脚本“program.py”从其他脚本中调用函数,用漂亮的汤做不同的分析。

因此,我的ma​​in program.py简化架构如下:

program.py :

import script1
import script2

script1.function1(urlA)
script2.function2(urlB)

与script1.py和script2.py如下:

script1.py :

import requests
import re
from bs4 import BeautifulSoup
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import * 

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()   


def function1(url):
    r = Render(url)
    soup = BeautifulSoup(unicode(r.frame.toHtml()))

    #Do many things with soup.
    #Nothing related to PyQT4 further in this script

我的脚本 2 具有完全相同的结构,但在另一个 url 上做了其他事情。

script2.py :

import requests
import re
from bs4 import BeautifulSoup
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import * 

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()   


def function2(url):
    r = Render(url)
    soup = BeautifulSoup(unicode(r.frame.toHtml()))

    #Do many other things with soup
    #Nothing related to PyQT4 further in this script

使用 script1.py 一切正常。我的函数 1 和分析运行成功。

但是 script2.py 有错误,我有以下错误:

QObject::connect: Cannot connect (null)::configurationAdded(QNetworkConfiguration) to QNetworkConfigurationManager::configurationAdded(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::configurationRemoved(QNetworkConfiguration) to QNetworkConfigurationManager::configurationRemoved(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::configurationChanged(QNetworkConfiguration) to QNetworkConfigurationManager::configurationChanged(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::onlineStateChanged(bool) to QNetworkConfigurationManager::onlineStateChanged(bool)
QObject::connect: Cannot connect (null)::configurationUpdateComplete() to QNetworkConfigurationManager::updateCompleted()

我花时间搜索这个问题,发现PyQT4无法在同一个实例中加载多个页面。

问题是我需要 PyQT4 在将页面内容加载到 Beautiful Soup 之前渲染 Javascript。

所以我认为我需要在 script1 中的 function1 末尾添加某种“self.app.quit()”,以便 script2 中的 function2 也可以使用 PyQT4 渲染页面。但我无法让它工作。

【问题讨论】:

标签: python beautifulsoup pyqt4 python-requests


【解决方案1】:

这个怎么样

r = Render(url)
soup = BeautifulSoup(unicode(r.frame.toHtml()))

r.app.quit()

【讨论】:

  • 嗨 furas,谢谢,但它不起作用我在脚本的远端添加“r.app.quit()”时仍然遇到同样的错误...
猜你喜欢
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2017-06-22
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多