In dem zuvor geschriebenen "Batch-Download-Bilder von bestimmten Site-URLs mit Python" zum Beispiel
<img src="../sample.png ">
Dieses Mal habe ich das Problem behoben, dass ich das Bild aufgrund von FEHLER nicht herunterladen konnte.
Allerdings ist dieses Programm grundsätzlich root auf URL? Ich denke an einen Fall, in dem es unterteilt ist (http: // domain name /
hierarchy).
(Ich kann ziemlich schlecht erklären und verstehe nicht, was ich sage (^^;) ↑)
Was ich in diesem Code hinzugefügt habe, ist eine Funktion namens "get_url_root". Argument: Vom Benutzer eingegebene URL Rückgabewert: URL bis zum Domainnamen. Wenn der Rückgabewert 0 ist, bedeutet dies FEHLER.
python
def get_url_root(url):
if("http://" in url):
url_delet_http = url.lstrip("http://")
if("/" in url_delet_http):
url_root = "http://" + url_delet_http[0:url_delet_http.find("/")]
return url_root
elif("https://" in url):
url_delet_https = url.lstrip("https://")
if("/" in url_delet_http):
url_root = "http://" + url_delet_http[0:url_delet_http.find("/")]
return url_root
return 0
Schließlich der Teil, in dem Sie das Bild tatsächlich herunterladen. Wenn die URL "../" enthält, verwenden Sie die obige Funktion, um die URL auf den Domainnamen zu bringen. Ändern Sie beispielsweise den Teil ".." von "../ sample.png " in "http: // sample.com / sample.png ".
python
for j in range(0,(len_url-1)):
url = number_url[j]
if("../" in url):
root_url = get_url_root(serch_url)
if(root_url!=0):
url = url.replace("..",root_url)
print url
download(url)
else:
download(url)
getimage.py
# -*- coding: utf-8 -*-
import urllib
import urllib2
import os.path
import sys
from HTMLParser import HTMLParser
def download(url):
img = urllib.urlopen(url)
localfile = open(os.path.basename(url),'wb')
localfile.write(img.read())
img.close()
localfile.close()
def get_url_root(url):
if("http://" in url):
url_delet_http = url.lstrip("http://")
if("/" in url_delet_http):
url_root = "http://" + url_delet_http[0:url_delet_http.find("/")]
return url_root
elif("https://" in url):
url_delet_https = url.lstrip("https://")
if("/" in url_delet_http):
url_root = "http://" + url_delet_http[0:url_delet_http.find("/")]
return url_root
return 0
class imgParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
def handle_starttag(self,tagname,attribute):
if tagname.lower() == "img":
for i in attribute:
if i[0].lower() == "src":
img_url=i[1]
#Erstellen einer Datei, in der die URLs der erfassten Fotos erfasst werden
f = open("collection_url.txt","a")
f.write("%s\t"%img_url)
f.close()
if __name__ == "__main__":
print('Geben Sie die URL der Site ein, auf der Sie das Foto erhalten möchten.')
input_url = raw_input('>>> ')
serch_url = input_url
htmldata = urllib2.urlopen(serch_url)
print('Derzeit werden Bilddateien abgerufen...')
parser = imgParser()
parser.feed(htmldata.read())
parser.close()
htmldata.close()
#Lesen Sie die generierte Datei
f = open("collection_url.txt","r")
for row in f:
row_url = row.split('\t')
len_url = len(row_url)
f.close()
number_url = []
for i in range(0,(len_url-1)):
number_url.append(row_url[i])
for j in range(0,(len_url-1)):
url = number_url[j]
if("../" in url):
root_url = get_url_root(serch_url)
if(root_url!=0):
url = url.replace("..",root_url)
print url
download(url)
else:
download(url)
print('Der Bilddownload ist abgeschlossen.')
#Datei löschen
os.remove("collection_url.txt")
Recommended Posts