سؤال

لذلك كتبت هذا البرنامج النصي القصير (الكلمة الصحيحة؟) لتنزيل الصور الهزلية من كاريكاتير 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 الحجم، ولكن ... لا تتردد في الاهتمام به، أنا فقط لن :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top