Как сохранить веб-страницу как изображение, используя python - PullRequest
1 голос
/ 04 ноября 2010

Я использую python для создания раздела «Избранное» сайта. Часть того, что я хочу сделать, это взять изображение, чтобы поместить рядом с их ссылкой. Таким образом, процесс будет заключаться в том, что пользователь вводит URL, а я беру скриншот этой страницы и показываю его рядом со ссылкой. Достаточно просто?

Я сейчас скачал pywebshot , и он отлично работает с моего терминала на моем локальном компьютере. Однако, когда я помещаю его на сервер, я получаю ошибку сегментации со следующей трассировкой:

/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
  warnings.warn(str(e), _gtk.Warning)
./pywebshot.py:16: Warning: invalid (NULL) pointer instance
  self.parent = gtk.Window(gtk.WINDOW_TOPLEVEL)
./pywebshot.py:16: Warning: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
  self.parent = gtk.Window(gtk.WINDOW_TOPLEVEL)
./pywebshot.py:49: GtkWarning: Screen for GtkWindow not set; you must always set
a screen for a GtkWindow before using the window
  self.parent.show_all()
./pywebshot.py:49: GtkWarning: gdk_screen_get_default_colormap: assertion `GDK_IS_SCREEN (screen)' failed
  self.parent.show_all()
./pywebshot.py:49: GtkWarning: gdk_colormap_get_visual: assertion `GDK_IS_COLORMAP (colormap)' failed
  self.parent.show_all()
./pywebshot.py:49: GtkWarning: gdk_screen_get_root_window: assertion `GDK_IS_SCREEN (screen)' failed
  self.parent.show_all()
./pywebshot.py:49: GtkWarning: gdk_window_new: assertion `GDK_IS_WINDOW (parent)' failed
  self.parent.show_all()
Segmentation fault

Я знаю, что некоторые вещи не могут работать в pts-среде, но, честно говоря, сейчас это немного за мной. Если мне нужно как-то притвориться, что мое pts-соединение tty, я могу попробовать. Но на данный момент я даже не уверен, что происходит, и я признаю, что это немного над моей головой. Любая помощь будет принята с благодарностью.

Кроме того, если есть веб-сервис, который я могу передать URL-адрес и получить изображение, это будет работать так же хорошо. Я НЕ женат на идее pywebshot.

Я знаю, что на сервере, на котором я работаю, установлен X и установлены все необходимые модули Python.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 04 ноября 2010

Я нашел websnapr.com , который представляет собой веб-сервис, который даст вам изображение с небольшой работой.

import subprocess
subprocess.Popen(['wget', '-O', MYFILENAME+'.png', 'http://images.websnapr.com/?url='+MYURL+'&size=s&nocache=82']).wait()

Легко, как пирог.

1 голос
/ 07 мая 2013
from selenium import webdriver    
from xvfbwrapper import Xvfb
d=Xvfb(width=400,height=400)
d.start()
browser=webdriver.Firefox()
url="/3951911/kak-sohranit-veb-stranitsu-kak-izobrazhenie-ispolzuya-python"
browser.get(url)
destination="screenshot_filename.jpg"
if browser.save_screenshot(destination):
    print "File saved in the destination filename"
browser.quit()
0 голосов
/ 04 ноября 2010

Позвольте мне угадать, сервер не имеет X-сервера, верно?

Возможно, вам придется запустить X-сервер без головы, чтобы это работало.

0 голосов
/ 04 ноября 2010

Вы можете использовать iMacros для Firefox (с открытым исходным кодом) из командной строки и сохранить изображение с помощью следующего снимка экрана браузера макрос-команды.

URL GOTO=http://www.yoursite.com
SAVEAS TYPE=PNG FOLDER=* FILE=My_Screenshot.png 

Это работает очень хорошо для любого сайта.

...