簡體   English   中英

使用python和webkit從網站下載文件時出現HTTP錯誤500:服務器錯誤

[英]While downloading a file from a website using python and webkit getting HTTP Error 500: Server Error

我正在嘗試從網站www.nsf.gov下載文件。 在瀏覽器中,首先我必須提出搜索請求,然后必須單擊導出文件選項以下載文件。

如果我嘗試手動執行此操作,則首先必須粘貼搜索請求的網址。然后,我需要在瀏覽器中粘貼導出網址。如果不執行第一個過程,則會顯示以下消息:

服務器錯誤

該服務器遇到內部錯誤,因此無法滿足您的請求。 最可能的原因是配置錯誤。 請要求管理員在服務器的錯誤日志中查找消息。

因此,以編程方式使用Webkit可以執行以下操作,但是仍然會出現以下錯誤:

urllib2.HTTPError:HTTP錯誤500:服務器錯誤。

請幫助我...我現在為此苦苦掙扎了一個星期。 這是我的代碼:

#!/usr/bin/env python

import sys
import signal

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

from bs4 import BeautifulSoup
import urllib2
import shutil
import urlparse
import os

class Crawler( QWebPage ):
    def __init__(self,url_name,file_name):
        QWebPage.__init__( self )
        self._url =   url_name      
    self._file = file_name

    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()
    self.process( self.mainFrame().toHtml())
    file_download('http://www.nsf.gov/awardsearch/ExportResultServlet?exportType=txt','result.txt')
        sys.exit( 0 )

    def process(self,content):

    html_doc=content
    soup = BeautifulSoup(html_doc)
    soup=soup.prettify()


def main():
    url_name='http://www.nsf.gov/awardsearch/advancedSearchResult?PIId=&PIFirstName=&PILastName=&PIOrganization=&PIState=&PIZip=&PICountry=&ProgOrganization=&ProgEleCode=&BooleanElement=All&ProgRefCode=&BooleanRef=All&Program=&ProgOfficer=&Keyword=&AwardNumberOperator=Range&AwardNumberFrom=1&AwardNumberTo=20000&AwardAmount=&AwardInstrument=&ActiveAwards=true&OriginalAwardDateOperator=&StartDateOperator=&ExpDateOperator='
    file_name='NSF Award Search: Advanced Search Results1.html'
    app = QApplication( sys.argv )
    crawler = Crawler(url_name,file_name)
    crawler.crawl()
    sys.exit( app.exec_() )

def file_download(url, fileName):

    r = urllib2.urlopen(urllib2.Request(url))
    try:
        fileName = fileName
        with open(fileName, 'wb') as f:
            shutil.copyfileobj(r,f)
    finally:
        r.close()

if __name__ == '__main__':
    main()

您可以這樣做,但是首先需要設置'queryText'變量,需要此字符串變量來搜索內容...
您可以使用以下URL進行測試,其中“ body”是查詢字符串:

http://www.nsf.gov/awardsearch/ExportResultServlet?exportType=txt&queryText=body&ActiveAwards=true

然后,您需要在代碼中使用此arg來獲取數據,我們稱之為查詢:

def _finished_loading( self, result, query ):
    URL = 'http://www.nsf.gov/awardsearch/ExportResultServlet?exportType=txt&queryText=' + query + '&ActiveAwards=true'
    file = open( self._file, 'w' )
    file.write( self.mainFrame().toHtml() )
    file.close()
    self.process( self.mainFrame().toHtml())
    file_download(URL,'result.txt')
    sys.exit( 0 )

暫無
暫無

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

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