Я пытался автоматизировать процесс загрузки изображений с определенных сайтов, и люди сказали мне использовать Python. Страницы сайта находятся в формате http://site/... /number.html
.Выход из цикла, когда последний файл является дубликатом текущего файла
склеивание вещи из разных источников, я закончил с this-
import os
import urllib
from urllib import urlopen
import BeautifulSoup
from BeautifulSoup import BeautifulSoup
import urllib2
import requests
import re
import hashlib
def md5(fname):
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
url = input()
usplit = re.split('/|\.', url)
title = usplit[5]
volume = None
if (usplit[6][0] == 'v'):
volume = usplit[6]
chapter = usplit[7]
pg_no = int(usplit[8])
else:
chapter = usplit[6]
pg_no = int(usplit[7])
if (volume is not None):
mpath = ".\\" + title + "\\" + volume + "\\" + chapter
if not os.path.isdir(mpath):
os.makedirs(mpath)
else:
mpath = ".\\" + title + "\\" + chapter
if not os.path.isdir(mpath):
os.makedirs(mpath)
while (1):
flg = 0
r = requests.get(url)
if (r.status_code!=200):
print "Exception: Access!"
exit()
print "Getting content from " + url
html = r.content
page = BeautifulSoup(html)
image = page.findAll('img')[0]['src']
res = urllib.urlopen (image)
prevfile = mpath + "\\" + str(pg_no-1) + ".jpg"
file = mpath + "\\" + str(pg_no) + ".jpg"
if (not (os.path.isfile(file))):
print "Writing to... " + file
output = open(file,"wb")
output.write(res.read())
output.close()
if (flg==1):
if (md5(file) == md5(prevfile)):
print "All done!"
exit()
print "Done."
else:
print str(pg_no) + ".jpg already exists, skipping..."
flg = 1
pg_no+=1
if (volume is not None):
newurl = usplit[0] + "//" + usplit[2] + "." + usplit[3] + "/" + usplit[4] + "/" + title + "/" + volume + "/" + chapter + "/" + str(pg_no) + "." + usplit[9]
else:
newurl = usplit[0] + "//" + usplit[2] + "." + usplit[3] + "/" + usplit[4] + "/" + title + "/" + chapter + "/" + str(pg_no) + "." + usplit[8]
url = newurl
Проблема в том, после того, как я достигну последнего изображение, сайт перенаправляет меня к последней действительной странице. То есть, если 46.html
является последней страницей, запрос на 47.html
перенаправляется на него, а r.status_code
остается неизменным. Чтобы обойти это, я попытался сравнить последний загруженный файл и текущий файл и завершить работу программы. Однако это не работает. Я новичок в этом и не знаю, как сравнивать файлы, а функция md5 - это то, что я нашел here. Я тоже пытался использовать filecmp
, но он тоже не работает.
Любые предложения? Кроме того, что касается кода, есть ли что-нибудь, что может быть сделано более Python-y?