2014-11-16 14 views
6

Tôi đang sử dụng DryScrape để cạo một trang javascript và đôi khi nó giết chết quá trình nếu có lỗi. Tôi đã cố gắng sử dụng một nắm bắt theo tài liệu hướng dẫn để ngăn chặn nó, nhưng tôi đã không figured it out:Kết nối bị từ chối khi cố gắng khởi động lại một chuỗi cho 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 

Vì vậy, tôi có một thiết lập như thế này để khởi động lại đề nếu họ sụp đổ: lớp Checker() : def check_if_thread_is_alive (tự): a = 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() 

Tuy nhiên, tôi kết thúc nhận được một lỗi bất cứ khi nào tôi cố gắng khởi động lại một sợi:

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 

Có cách nào tốt hơn để tìm cách giải quyết vấn đề này hoặc thiếu thứ gì đó không?

Trả lời

4

Cos: bạn đang thử kết nối với chính mình.

need change target url. 

nếu muốn kết nối với chính mình, hãy tạo dịch vụ trước.

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

Nếu bạn muốn bỏ qua ngoại lệ, bạn luôn có thể sử dụng trình xử lý ngoại lệ bắt giữ như thế này. Điều này thường được coi là rất nghiêm trọng, nhưng nó giữ cho scraper của bạn chạy nếu lỗi chỉ xảy ra thỉnh thoảng:

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

Và bạn có bắt đầu một máy chủ cục bộ để thử nghiệm không? Từ phần truy nguyên:

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

Bạn đang thực sự kết nối với máy chủ cục bộ. Nếu bạn khởi động máy chủ của riêng mình, hãy kiểm tra nhật ký máy chủ để xem lý do tại sao nó ngừng đáp ứng các yêu cầu kết nối.


Chỉ cần phát hiện một lỗi trong kịch bản của bạn:

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

tôi sẵn sàng đặt cược 'url' * là * một chuỗi URL, nhưng nó đã thay đổi vì lý do riêng tư. Rõ ràng là một sự thay thế xấu rõ ràng gây ra sự nhầm lẫn. –

Các vấn đề liên quan