2014-12-23 11 views
14

Her zaman olduğu gibi, sık sık sorunlarım var ve mevcut soruya tam olarak cevap aradım ancak kendimi bir kayıpta buldum. - How to fix httplib.BadStatusLine exception? - Python httplib2 Handling Exceptions - python http status codehttplib.BadStatusLine: ''

Sorunum şudur : İşte aramış yerlerden bazılarıdır. Bir örümcek yarattım ve farklı urlleri taramak istiyorum. Her URL'yi bağımsız olarak taradığımda her şey iyi çalışıyor. Ancak, her ikisini de taramaya çalıştığımda, aşağıdaki hatayı alıyorum: httplib.BadStatusLine: ''

Okuduğum bazı önerileri okudum (bkz. Yukarıda belirtilen bağlantılar) ve her istek çalışması için response.status yazdırabilirsiniz, ancak response.url yazdırmıyor ve hata atılıyor. (Sadece hatanın kaynağını tanımlamaya çalışmak için her iki ifadeyi de basıyorum).

Umarım bu açıktır. Ben scrapy ve selenyum kullanıyorum

class PeoplePage(Spider): 
    name = "peopleProfile" 
    allowed_domains = ["blah.com"] 
    handle_httpstatus_list = [200, 404] 
    start_urls = [ 
     "url1", 
     "url2" 
    ] 

    def __init__(self): 
     self.driver = webdriver.Firefox() 

    def parse(self, response): 
     print response.status 
     print '???????????????????????????????????' 
     if response.status == 200: 
      self.driver.implicitly_wait(5) 
      self.driver.get(response.url) 
      print response.url 
      print '!!!!!!!!!!!!!!!!!!!!' 

      # DO STUFF 

     self.driver.close() 

cevap

18

bir sunucu anlamadığımız bir HTTP durum kodu ile yanıt verirse httplib.BadStatusLine kaldırdı Python Doc dayanarak. Bu özel durumu iletmeyi deneyebilirsiniz. Birden fazla URL'yi arayacaksanız, sürücünüzü kapatmamalısınız.

def parse(self, response): 
    try: 
     print response.status 
     print '???????????????????????????????????' 
     if response.status == 200: 
      self.driver.implicitly_wait(5) 
      self.driver.get(response.url) 
      print response.url 
      print '!!!!!!!!!!!!!!!!!!!!' 

      # DO STUFF 
    except httplib.BadStatusLine: 
     pass 
+0

Teşekkür ederim Nima. Sanırım ana sorun oturumu kapatıyor olsaydı ... Tekrar teşekkürler! :-) –

1

ben kod kolayca yeniden kullanılabilir hale getirecek kadar, üst cevap yaptıklarını yapmak bir dekoratör yaptı:

bu deneyin. İşte bu:

import http 

def pass_bad_status_line_exc(wrapped_function): 
    """ 
    Silently pass this exception `http.client.BadStatusLine` decorator 
    """ 
    def _wrapper(*args, **kwargs): 
     try: 
      result = wrapped_function(*args, **kwargs) 
     except http.client.BadStatusLine: 
      return 
     return result 
    return _wrapper