2017-12-02 6 views
0

Ich bin neu im Programmieren und versuche, Bilder und PDFs von einer Website herunterzuladen. Im Quellcode sind die Elemente, die ich brauche, in Options-Tags mit partiellen URLs. Die Website listet diese Elemente in einem Dropdown-Menü auf und sie werden in einem iframe angezeigt, aber jedes Element kann auf seiner eigenen Seite mit der vollständigen URL geöffnet werden.Ändern einer geschabten URL und Ändern der Erweiterung

Bis jetzt findet mein Code die Optionen, hängt die partielle URL an die Basisadresse der Seite an, um die vollständige URL für jede Option zu erstellen, und entfernt das abschließende "/" aus den .tif- und .TIF-URLs und fügt ein " .pdf ".

Für die .tif und .TIF URLs muss ich jedoch "konvertieren" in "pdf" ändern, um sie auf einer neuen Seite zu öffnen. Gibt es eine Möglichkeit, dies nur für die URLs .tif.pdf und .TIF.pdf zu tun, während die anderen unverändert bleiben?

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 
import os 

my_url = 'http://example.com' 
uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.close() 

page_soup = soup(page_html, "html.parser") 

options = page_soup.findAll("select",{"id":"images"})[0].findAll("option") 
values = [o.get("value") for o in options] 

split_values = [i.split("|", 1)[0] for i in values] 
# The option value is split to separate the url from its label 
# <option value="/convert/ASRIMG/new/hop.TIF/|New Form"></option> 

new_val = [] 
for val in split_values: 
    ext = os.path.splitext(val.rstrip('/'))[-1] 
    new_ext = ext 
    if ext.lower() == '.tif': 
     new_ext += '.pdf' 
    new_val.append(val.rstrip('/').replace(ext, new_ext)) 

for i in range (len(new_val)): 
    image_urls = ('http://example.com' + new_val[i]) 

Mein aktuelles Ergebnis:

print (new_val) 

/ASRIMG/good.jpg 
/ASRIMG/foo/bar1.jpg 
/ASRIMG/foo/bar2.jpg 
/ASRIMG/foo/bar3.jpg 
/convert/ASRIMG/new/hop.TIF.pdf 
/convert/REG/green1.tif.pdf 
/convert/REG//green2.tif.pdf 
/convert/SHIP/green3.tif.pdf 
/convert/SHIP/green4.tif.pdf 
/convert/SHIP/green5.tif.pdf 
/SKETCHIMG/001.png 
/SKETCH/002.JPG 


print (image_urls) 

http://example.com/ASRIMG/good.jpg 
http://example.com/ASRIMG/foo/bar1.jpg 
http://example.com/ASRIMG/foo/bar2.jpg 
http://example.com/ASRIMG/foo/bar3.jpg 
http://example.com/convert/ASRIMG/new/hop.TIF.pdf 
http://example.com/convert/REG/green1.tif.pdf 
http://example.com/convert/REG//green2.tif.pdf 
http://example.com/convert/SHIP/green3.tif.pdf 
http://example.com/convert/SHIP/green4.tif.pdf 
http://example.com/convert/SHIP/green5.tif.pdf 
http://example.com/SKETCHIMG/001.png 
http://example.com/SKETCH/002.JPG 

Was ich brauche:

http://example.com/ASRIMG/good.jpg 
http://example.com/ASRIMG/foo/bar1.jpg 
http://example.com/ASRIMG/foo/bar2.jpg 
http://example.com/ASRIMG/foo/bar3.jpg 
http://example.com/pdf/ASRIMG/new/hop.TIF.pdf 
http://example.com/pdf/REG/green1.tif.pdf 
http://example.com/pdf/REG//green2.tif.pdf 
http://example.com/pdf/SHIP/green3.tif.pdf 
http://example.com/pdf/SHIP/green4.tif.pdf 
http://example.com/pdf/SHIP/green5.tif.pdf 
http://example.com/SKETCHIMG/001.png 
http://example.com/SKETCH/002.JPG 

Antwort

0

Nach diesem Schritt:

split_values = [i.split("|", 1)[0] for i in values] 

Dieser Code behandelt sowohl oberen und untere tif:

Diese
In [48]: import os 

In [49]: split_values = ['/ASRIMG/good.jpg', '/convert/ASRIMG/new/hop.TIF/', 'SK 
    ...: ETCHIMG/001.png'] 

In [50]: new_val = [] 

In [51]: for val in split_values: 
    ...:  ext = os.path.splitext(val.rstrip('/'))[-1] 
    ...:  new_ext = ext 
    ...:  if ext.lower() == '.tif': 
    ...:   new_ext += '.pdf' 
    ...:  new_val.append(val.rstrip('/').replace(ext, new_ext)) 
    ...: 
    ...: 

Streifen .tif/ von jedem Wert von split_values ​​Liste von der rechten Seite und fügt dann .tif.pdf am Ende

+0

Dank für Ihre schnelle Antwort danken. Ich habe diesen Code ausprobiert, aber er fügte allen URLs '.tif.pdf' hinzu. Zusätzlich zu '.tif.pdf' (was gut ist), habe ich:' .jpg.tif.pdf', '.TIF.tif.pdf' und' png.tif.pdf' (was mir einen Fehler gibt). – shybr

+0

Bearbeitet den Code zum Reparieren von '.TIF /'. Was ist die erwartete Ausgabe für '.jpg.tif' und' .png.tif'? –

+0

Die '.jpg',' .JPG' und '.png' sollten sich nicht ändern. Nur '.TIF /' und '.tif /' ändern sich zu '.TIF.pdf' und' .tif.pdf' – shybr

Verwandte Themen