Форум сайта python.su
0
хочу извлечь электронные адреса с сайта .
адрес электроники генерируется javascript-скриптом
пример кода с (http://www.mascus.com/heisel-equipment-company/51b81b77,companycard.html)
<span id="h754242Y"></span><script type="text/javascript">\n//<![CDATA[\n$(function() { var s929242H = function(b123968E) { b123968E=b123968E.replace(/c176057T/g,\'\'); b123968E=b123968E.replace(/x632816X/g,\'.\'); b123968E=b123968E.replace(/h21374K/g,\'@\'); return b123968E; };\nvar o938391R = function(q466574K) { var d748892R=\'\'; for (var i=q466574K.length-1;i>=0;i--) { d748892R+=q466574K[i]; } return d748892R; };\nvar v540997O = function(i500895E,h909762E) { var m613707L=s929242H(o938391R(i500895E)); var l283256W=\'ilt\';l283256W=\'ma\'+l283256W;l283256W+=\'o\'; if (!h909762E) { h909762E=m613707L; } $(\'#h754242Y\').html(\'<\' + \'a \' + \'rel\'+ \'="no\' +\'f\'+\'oll\'+ \'ow" class="Orange12Bold" hr\' + \'ef="#">\'+h909762E+\'<\'+\'/\' +\'a\' + \'>\'); var c176057T = function() { $(this).attr(\'hr\' +\'e\'+ \'f\', l283256W+ \':\'+m613707L); }; $(\'#h754242Y a\').mouseover(c176057T); };\nvar u48036O=[\'com\',\'816X\',\'632\',\'lx\',\'ai\',\'tm\',\'To\',\'57\',\'760\',\'Khc1\',\'1374\',\'13h2\',\'el\',\'is\',\'_he\',\'rk\',\'ma\'];var m238820U=null;v540997O(u48036O,m238820U);});\n//]]>\n</script>
Отредактировано agryn (Ноя. 14, 2012 17:43:14)
Офлайн
Подскажем:
from ghost import Ghost
from lxml.html import fromstring
url = 'http://www.mascus.com/21st-century-equipment-inc-gordon/282e0a01,companycard.html'
ghost = Ghost()
page, extra_resources = ghost.open(url)
tree = fromstring(ghost.content)
items = tree.xpath('//span[text()="E-mail address:"]/..'\
'/following-sibling::td[1]'
'//a[contains(text(), "@")]')
for item in items:
print item.text
Офлайн
0
lorien Не подскажешь Ghost возможно под винду настроить? А то я что-то начал, да так и не осилил… Ошибки валятся…
Офлайн
Не знаю, я в линуксе шарю только.
Офлайн
0
lorien, Я пробую запустить скрипт с примером кода под ubuntu 12.04.i686, все зависимости для Ghost установлены, но все таки как я понял нужно запускать иксы для работы Ghost-а (после
ghost = Ghost()
Xvfb is required to a ghost run oustside an X instance
Отредактировано agryn (Ноя. 15, 2012 12:47:27)
Офлайн
Подскажем. Ставишь Xvfb:
sudo aptitude Xvfb
Запускаешь:
Xvfb :0 -screen 0 1024x768x16
Далее запускаешь команду:
DISPLAY=:0.0 python yourscript.py
Офлайн
0
Последний вопрос. Эти все файлы с которых мне нужно стянуть электроники уже сохранены на диске. Как бы их загнать в Ghost?
Офлайн
173
agryn
Эти все файлы с которых мне нужно стянуть электроники уже сохранены на диске. Как бы их загнать в Ghost?
"file://localhost/full/path/to/some/file.html"
Офлайн
0
Вариант такой записи сработал. Но от такая ошибка:
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
/root/<ipython-input-5-5b73efb33967> in <module>()
----> 1 page, extra_resources = ghost.open(url)
/usr/local/lib/python2.7/dist-packages/ghost/ghost.pyc in open(self, address, method)
387 self.main_frame.load(request, method, body)
388 self.loaded = False
--> 389 return self.wait_for_page_loaded()
390
391 class prompt:
/usr/local/lib/python2.7/dist-packages/ghost/ghost.pyc in wait_for_page_loaded(self)
492 """
493 self._wait_for(lambda: self.loaded,
--> 494 'Unable to load requested page')
495 resources = self._release_last_resources()
496 page = None
/usr/local/lib/python2.7/dist-packages/ghost/ghost.pyc in _wait_for(self, condition, timeout_message)
554 while not condition():
555 if time.time() > (started_at + self.wait_timeout):
--> 556 raise Exception(timeout_message)
557 time.sleep(0.01)
558 self.app.processEvents()
Exception: Unable to load requested page
Отредактировано agryn (Ноя. 16, 2012 11:21:19)
Офлайн
Видимо, потому что Ghost пытается подгрузить скрипты и стили и прочие объекты, прописанные в HTML сохранённых страниц, но т.к. ссылки там относительные, то он не может ничего загрузить.
Офлайн