2012-04-29 3 views
1

Я пытаюсь улучшить recipe для calibre и заменить изображение крышки по умолчанию с обложкой текущего выпуска газеты.Получить изображение с веб-сайта

Способ перехода имеет отношение к get_cover_url (link).

Есть две проблемы:

  1. URL, закрывающей изображения меняется каждый день.
  2. Я практически ничего не знаю о питоне.

Я надеюсь, что для решения, как это (в псевдокоде):

OPEN URL "http://epaper.derstandarddigital.at/"; 
coverElement = (SEARCH HTML-ELEMENT "<img>" WITH ID "imgPage2" AND CLASS "page"); 
coverUrl = (GET HTML-ATTRIBUTE "src" FROM coverElement); 
RETURN coverUrl; 

Будет ли способ для достижения этой цели в питоне *) (используя только стандартные библиотеки Python)?

*) Калибр-рецепты, кажется, Python код

[править] вот решение мой друг предложил:

#!/usr/bin/env python 

import urllib 
from time import strftime 


def get_cover_url(self): 
    highResolution = True 

    date = strftime("%Y/%Y%m%d") 
    # it is also possible for the past 
    #date = '2012/20120503' 

    urlP1 = 'http://epaper.derstandarddigital.at/' 
    urlP2 = 'data_ep/STAN/' + date 
    urlP3 = '/V.B1/' 
    urlP4 = 'paper.htm' 
    urlHTML = urlP1 + urlP2 + urlP3 + urlP4 

    htmlF = urllib.urlopen(urlHTML) 
    htmlC = htmlF.read() 


    # URL EXAMPLE: data_ep/STAN/2012/20120504/V.B1/pages/A3B6798F-2751-4D8D-A103-C5EF22F7ACBE.htm 
    # consists of part2 + part3 + 'pages/' + code 
    # 'pages/' has length 6, code has lenght 36 

    index = htmlC.find(urlP2) + len(urlP2 + urlP3) + 6 
    code = htmlC[index:index + 36] 


    # URL EXAMPLE HIGH RESOLUTION: http://epaper.derstandarddigital.at/data_ep/STAN/2012/20120504/pagejpg/A3B6798F-2751-4D8D-A103-C5EF22F7ACBE_b.png 
    # URL EXAMPLE LOW RESOLUTION: http://epaper.derstandarddigital.at/data_ep/STAN/2012/20120504/pagejpg/2AB52F71-11C1-4859-9114-CDCD79BEFDCB.png 

    urlPic = urlP1 + urlP2 + '/pagejpg/' + code 

    if highResolution: 
     urlPic = urlPic + '_b' 

    urlPic = urlPic + '.png' 

    return urlPic 



if __name__ == '__main__': 
    print get_cover_url(None) 
+2

см. Urllib2 и прекрасный суп – jadkik94

ответ

3

Вы можете использовать lxml библиотеку для извлечения элементов из HTML документ. Основная структура будет выглядеть примерно так:

import urllib 
import lxml.html 

fd = urllib.urlopen('http://epaper.derstandarddigital.at/') 
doc = lxml.html.parse(fd) 
matches = doc.xpath('//img[@id="imgPage2]') 
if matches: 
    print matches[0].get('src') 

... однако URL вы указали на самом деле не приведет к документу с любыми <img> тегами. Это почти полностью куча Javascript.

+0

спасибо! означает ли это, что моя цель почти невозможна? – speendo

+1

Нет, это просто означает, что вам нужно выяснить фактический URL нужного документа. Похоже, что этот сайт, вероятно, загружает набор фреймов, поэтому, возможно, вы можете получить URL-адрес соответствующего фрейма. – larsks