ダウンロードEXPLOSM.net コミックのスクリプト[Python]
質問
あっ、このリクエストを正しいでしょう?) ダウンロードコミック画像からexplosm.net コミックから少し-最近見つけましたので、たいて---でもiPhone-3G.
で動作しております。urllib2ってページのhtml urllibのためのイメージです。の取得()
なぜ掲載につい:方法の最適化をこのコードについて教えてください。う正規表現(regular expressions)を作れが早い?これはインターネット限定?貧しいアルゴリズム...?
改善に速や 一般コードの美学 をお願い申し上げます"答え".
お願い致します。
--------------------------------コード----------------------------------
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..."
ちなみに、これはPython2.5コードは3.0でもベットまで揃っているのが特徴でPYthon3.0大学やっと前後すぐに新しい年の大学卒業後、アプリ-ズラリ!^-^)
他のヒント
refactormycode の議論のこれら「のは、このコードを改善しましょう」タイプのためのより適切なウェブサイトかもしれません。
私は構文解析を行うために BeautifulSoup に使用することをお勧め、それは多くのあなたのコードをsimpliflyうます。
あなたはすでにそれがこのように働いてしまったので、それは(ページフォーマットの変更)を破断するまでしかし、多分あなたはそれに触れたくはありません。
urllib2のは、ブロッキング呼び出しを使用し、それがパフォーマンスのための主な理由です。 あなたは(scrapyのような)非ブロックライブラリを使用したり、検索のために複数のスレッドを使用する必要があります。私はscrapyを使用したことがない(ので、私はそのオプションに伝えることができない)が、Pythonでスレッドは本当に簡単でわかりやすいです。
バッシュを使用して、今日と同じでした。その本当に基本的な、しかし、うまく働いています。
私は最初、私はファイルを置く2つのディレクトリを作成しました
mkdir -p html/archived
mkdir png
次に、2つの段階で働いていました。まず、すべてのページを閲覧します:
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
第二、ページごとに、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.zipする
私は潜在的な障害についてあまり気にしませんでしたが、4606個のファイルをカウントすると、それはほとんどOK思われることに注意してください。
私はまた、PNGなど、すべてを保存しました。彼らはおそらくJPGされ、そして、私は185 0サイズのファイルに気づくが...それを気にすること自由に感じ、私はしません。)