2015-12-11 4 views
2

Я использую dryscrape для очистки некоторых данных HTML с разных страниц. Все это часть приложения django, но я обнаружил, что эта проблема возникает при использовании оболочки python. Проблема со вторым подключением. Я использую:dryscrape - соединение было отказано при создании нового сеанса после первого

Python 2.7.6 (default, Mar 4 2014, 13:14:52) 
dryscrape Version: 0.9 
webkit-server Version: 1.0 
xvfbwrapper Version: 0.2.5 

Ниже вы можете увидеть путь, как я хотел бы использовать его в порядке

Python 2.7.6 (default, Mar 4 2014, 13:14:52) 
Type "copyright", "credits" or "license" for more information. 

IPython 2.1.0 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: import dryscrape 

In [2]: from xvfbwrapper import Xvfb 

In [3]: x = Xvfb() 

In [4]: x.start() 

In [5]: session = dryscrape.Session(base_url='http://google.com') 

In [6]: session.visit('') 

In [7]: session.url() 
Out[7]: u'http://www.google.pl/?gfe_rd=cr&ei=d95qVvLfFc2v8wfamoG4Aw' 

In [8]: x.stop() 

Всё сейчас. Но если я пытаюсь продолжить, с другой сессией

... 
In [8]: x.stop() 

In [9]: x = Xvfb() 

In [10]: x.start() 

In [11]: session = dryscrape.Session(base_url='http://google.com') 
--------------------------------------------------------------------------- 
error          Traceback (most recent call last) 
<ipython-input-11-6cbe39a8459d> in <module>() 
----> 1 session = dryscrape.Session(base_url='http://google.com') 

/home/mefioo/public_html/kariera_naukowa/env/lib/python2.7/site-packages/dryscrape/session.pyc in __init__(self, driver, base_url) 
    16    driver = None, 
    17    base_url = None): 
---> 18  self.driver = driver or DefaultDriver() 
    19  self.base_url = base_url 
    20 

/home/mefioo/public_html/kariera_naukowa/env/lib/python2.7/site-packages/dryscrape/driver/webkit.pyc in __init__(self, **kw) 
    28 def __init__(self, **kw): 
    29  kw.setdefault('node_factory_class', NodeFactory) 
---> 30  super(Driver, self).__init__(**kw) 

/home/mefioo/public_html/kariera_naukowa/env/lib/python2.7/site-packages/webkit_server.pyc in __init__(self, connection, node_factory_class) 
    228    node_factory_class = NodeFactory): 
    229  super(Client, self).__init__() 
--> 230  self.conn = connection or ServerConnection() 
    231  self._node_factory = node_factory_class(self) 
    232 

/home/mefioo/public_html/kariera_naukowa/env/lib/python2.7/site-packages/webkit_server.pyc in __init__(self, server) 
    505 def __init__(self, server = None): 
    506  super(ServerConnection, self).__init__() 
--> 507  self._sock = (server or get_default_server()).connect() 
    508  self.buf = SocketBuffer(self._sock) 
    509  self.issue_command("IgnoreSslErrors") 

/home/mefioo/public_html/kariera_naukowa/env/lib/python2.7/site-packages/webkit_server.pyc in connect(self) 
    438  """ Returns a new socket connection to this server. """ 
    439  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
--> 440  sock.connect(("127.0.0.1", self._port)) 
    441  return sock 
    442 

/usr/local/lib/python2.7/socket.pyc in meth(name, self, *args) 
    222 
    223 def meth(name,self,*args): 
--> 224  return getattr(self._sock,name)(*args) 
    225 
    226 for _m in _socketmethods: 

error: [Errno 111] Connection refused 

Я делаю это только для примера, потому что в моем Джанго приложении это часть зрения логики, и с просьбы, что просматривать результаты второго времени в этой ошибке. Перезапуск сервера django или оболочки python решает его, но только для первого подключения, поэтому для рабочей веб-страницы это бесполезно. Я пропускаю некоторые «чистые» или «перезапускаемые» сеансы X или webkit-server (capibara-webkit) между этими двумя?

ответ

0

Хорошо, это не «настоящий» ответ, потому что я до сих пор не знаю, что не так, но я нашел способ заставить это работать. Я обновил dryscrape до 1.0 и использовал новый метод dryscrape.start_xvfb() вместо xvfbwrapper Xvfb(). Все работает нормально.