Tôi đang viết chương trình python sử dụng PyQT4 để tải một số URL và xử lý nội dung của nó/DOM (sau khi được sửa đổi bởi javascript). Tôi cũng cần tiêu đề tùy chỉnh để yêu cầu trang đó.Không thể thêm tiêu đề yêu cầu tùy chỉnh trong PyQT4
Mã bên dưới đang hoạt động ngoại trừ việc mã không thể tìm nạp URL bằng cách sử dụng tiêu đề tùy chỉnh của tôi tôi xác định với QNetworkRequest.
import sys
import signal
from optparse import OptionParser
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import QWebPage
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
class MyNetworkAccessManager(QNetworkAccessManager):
def __init__(self, url):
QNetworkAccessManager.__init__(self)
self.request = QNetworkRequest(QUrl(url))
self.request.setRawHeader('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)')
self.request.setRawHeader("Accept-Language","en-us,en;q=0.5");
self.request.setRawHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
self.request.setRawHeader("Connection","keep-alive");
self.reply = self.get(self.request)
def createRequest(self, operation, request, data):
print "mymanager handles ", request.url()
return QNetworkAccessManager.createRequest(self, operation, request, data)
class Crawler(QWebPage):
def __init__(self, url, file):
QWebPage.__init__(self)
self._url = url
self._file = file
manager = MyNetworkAccessManager(url)
self.setNetworkAccessManager(manager)
def userAgentForUrl(self, url):
return "Mozilla/122.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
def crawl(self):
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.connect(self, SIGNAL('loadFinished(bool)'), self._finished_loading)
self.mainFrame().load(QUrl(self._url))
def _finished_loading(self, result):
file = open(self._file, 'w')
file.write(self.mainFrame().toHtml())
file.close()
sys.exit(0)
def main():
app = QApplication(sys.argv)
options = get_cmd_options()
crawler = Crawler(options.url, options.file)
crawler.crawl()
sys.exit(app.exec_())
def get_cmd_options():
"""
gets and validates the input from the command line
"""
usage = "usage: %prog [options] args"
parser = OptionParser(usage)
parser.add_option('-u', '--url', dest = 'url', help = 'URL to fetch data from')
parser.add_option('-f', '--file', dest = 'file', help = 'Local file path to save data to')
(options,args) = parser.parse_args()
if not options.url:
print 'You must specify an URL.',sys.argv[0],'--help for more details'
exit(1)
if not options.file:
print 'You must specify a destination file.',sys.argv[0],'--help for more details'
exit(1)
return options
if __name__ == '__main__':
main()
Bạn có thể cho tôi biết lý do tại sao không chọn cài đặt tiêu đề không?