簡體   English   中英

輸出多次打印

[英]Output prints several times

下面的代碼可以正常工作,除了一件事情:所需的輸出打印幾次=)

#! /usr/bin/env python2.7

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from bs4 import BeautifulSoup as bs
from random import choice
from urllib import urlretrieve
from urllib2 import *
import sys
import os


# Settings for browser
class MyBrowser(QWebPage):
    def __init__(self):
        QWebPage.__init__(self)
        # Specifies whether images are automatically loaded in web pages.
        self.settings().setAttribute(QWebSettings.AutoLoadImages, False)

    def userAgentForUrl(self, url):
        return "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15"



class Name_Creater(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.setPage(MyBrowser())
        self.loadFinished.connect(self.grab_first_name)
        self.frame = self.page().mainFrame()

    def grab_first_name(self):
        html = unicode(self.frame.toHtml()).encode('utf-8')
        soup = bs(html)
        for name in soup.findAll('li', text=True):
            print name

if __name__ == '__main__':
    app = QApplication(sys.argv)
    url_first_names = QUrl("http://www.genealogyroadtrip.com/Census/male_names_1.htm")
    br = Name_Creater()
    br.load(url_first_names)
    br.show()
    app.exec_()

問題是,你要連接到loadFinished的信號QWebView ,這將為被加載的每個頁面可以一次發射。 因此,如果有多個幀,將發出多個loadFinished信號。

解決方案是連接到mainFrameloadFinished信號:

self.setPage(MyBrowser())
self.frame = self.page().mainFrame()
self.frame.loadFinished.connect(self.grab_first_name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM