تحميل من Script من Explosm.net كاريكاتير [بيثون
سؤال
لذلك كتبت هذا البرنامج النصي القصير (الكلمة الصحيحة؟) لتنزيل الصور الهزلية من كاريكاتير Explosm.net لأنني اكتشفت مؤخرا عن ذلك وأريد أن ... ضعها على جهاز iPhone الخاص بي ... 3G.
إنه يعمل بشكل جيد وكل شيء. Urllib2 للحصول على صفحة الويب HTML و Urllib for Image.retrieve ()
لماذا نشرت هذا على ذلك: كيف يمكنني تحسين هذا الرمز؟ سوف Regex (التعبيرات العادية) جعلها أسرع؟ هل هو قيود على الإنترنت؟ خوارزمية سيئة ...؟
أي تحسينات في السرعة أو جماليات الكود العام سيكون موضع تقدير كبير "الإجابات".
شكرا لك.
--------------------------------الشفرة----------------- -----------------
import urllib, urllib2
def LinkConvert(string_link):
for eachLetter in string_link:
if eachLetter == " ":
string_link = string_link[:string_link.find(eachLetter)] + "%20" + string_link[string_link.find(eachLetter)+1:]
return string_link
start = 82
end = 1506
matchingStart = """<img alt="Cyanide and Happiness, a daily webcomic" src="http://www.explosm.net/db/files/Comics/"""
matchingEnd = """></"""
link = "http://www.explosm.net/comics/"
for pageNum in range(start,start+7):
req = urllib2.Request(link+`pageNum`)
response = urllib2.urlopen(req)
page = response.read()
istart1 = page.find(matchingStart)
iend1 = page.find(matchingEnd, istart1)
newString1 = page[istart1 : iend1]
istart2 = newString1.find("src=")+4
iend2 = len(newString1)
final = newString1[istart2 +1 : iend2 -1]
final = LinkConvert(final)
try:
image = urllib.URLopener()
image.retrieve(final, `pageNum` + ".jpg")
except:
print "Uh-oh! " + `pageNum` + " was not downloaded!"
print `pageNum` + " completed..."
بالمناسبة، هذا هو كود بيثون 2.5، وليس 3.0 ولكن أراهن أن لدي جميع ميزات Python 3.0 مدروسة إلى حد كبير وتشغيلها مع قبل أو مباشرة بعد السنة الجديدة (بعد تطبيقات الكلية - YAY! ^ - ^)
المحلول
نصائح أخرى
refactormycode. قد يكون موقع الويب أكثر ملاءمة لهذه "دعونا نحسن هذا الرمز" نوع المناقشات.
أقترح باستخدام جميلة للقيام بالتحليل، فإنه سيبدأ رمزك كثيرا.
ولكن نظرا لأنك حصلت بالفعل على أنها تعمل بهذه الطريقة، فربما لن ترغب في لمسه حتى يكسر (تغييرات تنسيق الصفحة).
يستخدم Urllib2 مكالمات الحظر، وهذا هو السبب الرئيسي للأداء. يجب عليك استخدام مكتبة غير حظر (مثل Scriap) أو استخدم مؤشرات ترابط متعددة للاسترجاع. لم أستخدمها أبدا (لذلك لا أستطيع أن أقول هذا الخيار)، لكن الخيوط في بيثون سهل حقا ومباشر.
فعلت نفس الشيء اليوم باستخدام باش. انها الأساسية حقا، ولكنها عملت بشكل جيد.
قمت أولا بإنشاء دليلين لأول مرة، حيث أضع الملفات:
mkdir -p html/archived
mkdir png
ثم عملت مع خطوتين. أولا، تصفح جميع الصفحات:
START=15
END=4783
for ((i=START;i<=END;i++)); do
echo $i
wget http://explosm.net/comics/$i/ -O html/$i.html
done
#Remove 404
find html -name '*.html' -size 0 -print0 | xargs -0 rm
2nd، لكل صفحة، إلغاء HTMLM واسترجاع الصورة:
#!/bin/bash
for filename in ./html/*.html; do
i=`echo $filename | cut -d '"' -f 4 | cut -d '/' -f3 | cut -d '.' -f1`
echo "$filename => $i"
wget -c "$(grep '<meta property="og:image" content=' ${filename} | cut -d '"' -f 4)" -O ./png/${i}.png
mv $filename ./html/archived/
done
النتيجة هنا:cyanide_and_happiness__up_to_2017-11-24.z.
لاحظ أنني لم أهتم كثيرا في فشل محتمل، لكن عد 4606 ملفات، يبدو في الغالب موافق.
أنا أيضا أنقذ كل شيء كما PNG. ربما هم JPG، وألاحظوا 185 ملفات 0 الحجم، ولكن ... لا تتردد في الاهتمام به، أنا فقط لن :)