2014-11-16 5 views
6

के लिए एक धागा मैं DryScrape एक जावास्क्रिप्ट पेज स्क्रैप करने का उपयोग कर रहा हूँ पुनः आरंभ करने की कोशिश कर रहा है, और कभी कभी यह प्रक्रिया थेरेस अगर एक त्रुटि को मारता है। मैं प्रलेखन यह को रोकने के लिए के अनुसार एक पकड़ने का उपयोग कर की कोशिश की है, लेकिन मैं इसे समझ नहीं किया है बाहर:कनेक्शन अस्वीकृत जब webscrapper

 try: 
      sess.visit('url')) 
     except webkit_server.EndOfStreamError: 
      continue 
     except webkit_server.NoResponeerror: 
      continue 
     except webkit_server.InvalidResponseError: 
      continue 
     except webkit_server.NoX11Error: 
      continue 

तो मैं अगर धागे को पुनः आरंभ करने के लिए इस तरह एक सेटअप वे दुर्घटना: वर्ग परीक्षक() : डीईएफ़ check_if_thread_is_alive (स्वयं): एक = ThreadClass() a.start()

b = ThreadClass() 
    b.start() 

    c = ThreadClass() 
    c.start() 

    d = ThreadClass() 
    d.start() 

    while True: 
     if not a.is_alive(): 
      print "Restarting A" 
      a = ThreadClass() 
      a.start() 
     if not b.is_alive(): 
      print "Restarting B" 
      b = ThreadClass() 
      b.start() 
     if not c.is_alive(): 
      print "Restarting C" 
      c = ThreadClass() 
      c.start() 
     if not d.is_alive(): 
      print "Restarting D" 
      d = ThreadClass() 
      d.start() 

हालांकि, मैं एक त्रुटि हो रही अंत जब भी मैं एक धागा पुनः आरंभ करने की कोशिश:

Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "Scrapper.py", line 30, in run 
    sess = dryscrape.Session(base_url = 'url') 
    File "/usr/local/lib/python2.7/dist-packages/dryscrape/session.py", line 18, in __init__ 
    self.driver = driver or DefaultDriver() 
    File "/usr/local/lib/python2.7/dist-packages/dryscrape/driver/webkit.py", line 30, in __init__ 
    super(Driver, self).__init__(**kw) 
    File "/usr/local/lib/python2.7/dist-packages/webkit_server.py", line 225, in __init__ 
    self.conn = connection or ServerConnection() 
    File "/usr/local/lib/python2.7/dist-packages/webkit_server.py", line 444, in __init__ 
    self._sock = (server or get_default_server()).connect() 
    File "/usr/local/lib/python2.7/dist-packages/webkit_server.py", line 414, in connect 
    sock.connect(("127.0.0.1", self._port)) 
    File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
error: [Errno 111] Connection refused 

इस समस्या है, या कुछ im लापता का समाधान करने का प्रयास करने का एक बेहतर तरीका है?

उत्तर

4

कॉस: आप अपने आप से कनेक्ट करने का प्रयास कर रहे हैं।

need change target url. 

यदि आप स्वयं से कनेक्ट करना चाहते हैं, तो पहले सेवा बनाएं।

File "/usr/local/lib/python2.7/dist-packages/webkit_server.py", line 414, in connect 
    sock.connect(("127.0.0.1", self._port)) 
    File "/usr/lib/python2.7/socket.py", line 224, in meth <<<--- you're trying to connect to yourself. 
    return getattr(self._sock,name)(*args) 
1

यदि आप अपवाद को छोड़ना चाहते हैं, तो आप हमेशा इस तरह के कैच-अप अपवाद हैंडलर का उपयोग कर सकते हैं। यह आम तौर पर बहुत बुरा व्यवहार माना जाता है, लेकिन यह आपके स्क्रेपर चल रहा है, तो त्रुटि कभी कभी ही होता है रखता है:

try: 
    sess.visit(url) 
except Exception as e: 
    # Print the exception for debugging here 
    continue 

और आप परीक्षण के लिए एक स्थानीय सर्वर शुरू कर रहे हैं? ट्रैस बैक से:

File "/usr/local/lib/python2.7/dist-packages/webkit_server.py", line 414, in connect 
sock.connect(("127.0.0.1", self._port)) 

आप वास्तव में स्थानीय होस्ट से कनेक्ट कर रहे। आप अपने खुद के सर्वर शुरू करते हैं, यह देखने के लिए क्यों यह कनेक्शन अनुरोधों का जवाब देने बंद हो जाता है सर्वर लॉग की जाँच करें।


बस अपनी स्क्रिप्ट में एक और गलती देखा:

sess.visit('url') 
# it should be something like: 
url = "http://www.google.com/" 
sess.visit(url) 
+0

मैं 'url' शर्त करने को तैयार हूँ * था * एक URL स्ट्रिंग, लेकिन यह गोपनीयता कारणों बदल गया था। जाहिर है एक बुरा प्रतिस्थापन जो स्पष्ट रूप से भ्रम का कारण बनता। –

संबंधित मुद्दे