Python 正在尝试PyQt4,无法抓取多个网页

Python 正在尝试PyQt4,无法抓取多个网页,python,Python,我正在尝试修改以一次抓取多个URL并捕获抛出的特定javascript标记。这是我的密码: #!/usr/bin/env python import sys import signal import urllib import re import csv import time from optparse import OptionParser from PyQt4 import QtCore from PyQt4.QtCore import * from PyQt4.QtGui impor

我正在尝试修改以一次抓取多个URL并捕获抛出的特定javascript标记。这是我的密码:

#!/usr/bin/env python

import sys
import signal
import urllib
import re
import csv
import time

from optparse import OptionParser
from PyQt4 import QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage

class Crawler( QWebPage ):
    def __init__(self, url, file):
        QWebPage.__init__( self )
        self._url = url
        #print(url)
        self._file = file
        #print(file)

    def crawl( self ):
        signal.signal( signal.SIGINT, signal.SIG_DFL )
        self.connect( self, SIGNAL( 'loadFinished(bool)' ), self._finished_loading )
        #print(self._url)
        self.mainFrame().load( QUrl( self._url ) )

    def _finished_loading( self, result ):
        print(self._url)
        file = open( self._file, 'a' )
        s = QtCore.QString('aJavascriptKeyword')
        val = (self.mainFrame().toHtml().indexOf(s) >= 0)
        #print val
        file.write( self._url + '^' + str(val) )
        #print( self._url + '^' + str(val) )
        file.close()
        sys.exit( 0 )

def main():
    app = QApplication( sys.argv )

    urls = open(r'urls.txt','r')
    #output=open(r'C:\Users\me\output.txt','w')
    for url in urls:
        #print(url)
        crawler = Crawler( url, "output.txt" )
        crawler.crawl()
    sys.exit( app.exec_() )


if __name__ == '__main__':
    main()
在本例中,urls.txt只是一个文本文件,每行有一个url。当我用一个包含1个url的文件运行这个程序时,它工作得非常好,但是当我用>1个url运行时,只有最后的url被传递给finished_loading()。我做错了什么?问题是

for url in urls:
    ...
    crawler = Crawler( url, "output.txt" )
    crawler.crawl()
在不运行主PyQt应用程序的情况下完成。这意味着每次循环迭代时都会重置爬虫程序,最后它只是具有最后一个url的爬虫程序

一种解决方案可能是保存实例化爬虫的实例

def main():
    app = QApplication( sys.argv )

    # Get all the urls
    with open(r'urls.txt','r') as urls:
        my_urls = [u.rstrip("\n") for u in urls]

    # Instantiate all the Crawlers
    crawlers = [Crawler(u, "output.txt") for u in my_urls]

    # Call all of the crawlers' crawl methdos
    for crawler in crawlers:
        crawler.crawl()

    sys.exit( app.exec_() )

嗯,这对我不起作用。我在main()中遇到一个错误,我将其更改为:“使用open(r'urls.txt','r')作为URL:URL=[u.replace(“\n”,”)表示URL中的u]”。之后,程序运行没有错误,但没有完全加载任何一个网页。我没有得到完整的html,而是得到了“”,谢谢你指出了错误!您确定正在查看的URL有正文吗?你是否在浏览器中或
curl
中检查它们?是否可以发布URL.txt中的一些URL?我只是在abc的主页和espn的主页上进行测试。出于某种原因,我无法在这个评论框中键入这些URL,但它只是http://www.abc/espn.com。当我在博客代码中只运行其中一个URL时,我就得到了完整的html页面。啊,这一点很好!我已使用另一个可能的修复程序更新了解决方案。