質問

あっ、このリクエストを正しいでしょう?) ダウンロードコミック画像から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大学やっと前後すぐに新しい年の大学卒業後、アプリ-ズラリ!^-^)

役に立ちましたか?

解決

私はあなたが使用 Scrapy のためのページを取得および 美しいスープ の解析.このようにコードで多くより簡単になります。

するための他のいかなる変更に既存のコードが作られるかはあなた次第です。ない場合は、正規表現でしょう簡単にコードを幾分強含んでいる。お使いいただくことによって効果がでます。

他のヒント

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サイズのファイルに気づくが...それを気にすること自由に感じ、私はしません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top