毎日インターネットを閲覧していると、素敵な写真を目にすることが多く、その写真を保存してダウンロードしたり、デスクトップの壁紙やデザイン素材として使用したくなります。
最も一般的な方法は、マウスを右クリックして [名前を付けて保存] を選択することです。ただし、一部の画像には、マウスを右クリックしたときに名前を付けて保存するオプションがありません。スクリーンショット ツールを使用してキャプチャすることもできますが、これにより画像の鮮明さが低下します。よし〜!実際、右クリックしてページのソース コードを表示するのは非常に便利です。
Pythonを使用してこのような単純なクローラー機能を実装し、必要なコードをローカルでクロールできます。 Python を使用してこのような機能を実装する方法を見てみましょう。
まず、ページ全体のデータを取得します
まず、ダウンロードする画像のページ全体の情報を取得できます。
getjpg.py
#coding=utf-8 import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html html = getHtml("http://tieba.baidu.com/p/2738151262") print html
Urllib モジュールは、Web ページのデータを読み取るためのインターフェイスを提供します。ローカル ファイルを読み取るのと同じように、www と ftp 上のデータを読み取ることができます。まず、getHtml() 関数を定義します。
urllib.urlopen() メソッドは、URL アドレスを開くために使用されます。
read()メソッドは、URL上のデータを読み取り、getHtml()関数にURLを渡し、ページ全体をダウンロードするために使用されます。プログラムを実行すると、Web ページ全体が印刷されます。
次に、ページ内で必要なデータをフィルターします
Python には非常に強力な正規表現が用意されています。まず、Python の正規表現について少し知る必要があります。
Baidu Tieba でいくつかの美しい壁紙を見つけて、前のセクションに移動してツールを表示するとします。次のような画像のアドレスが見つかりました: src=”http://imgsrc.baidu.com/forum...jpg” pic_ext=”jpeg”
コードを次のように変更します:
import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imglist = re.findall(imgre,html) return imglist html = getHtml("http://tieba.baidu.com/p/2460150866") print getImg(html)
getImg() 関数も、取得したページ全体で必要な画像リンクをフィルター処理するために作成されました。 re モジュールには主に正規表現が含まれています:
re.compile() は正規表現を正規表現オブジェクトにコンパイルできます
re.findall() メソッドは html 内の imgre (正規表現) を含むデータを読み取ります。
スクリプトを実行すると、ページ全体に含まれる画像のURLアドレスが取得されます。
3、ページのフィルタリングされたデータをローカルに保存します
for ループを通してフィルタリングされた画像アドレスをトラバースし、それをローカルに保存します。 コードは次のとおりです:
#coding=utf-8 import urllib import re def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.+?\.jpg)" pic_ext' imgre = re.compile(reg) imglist = re.findall(imgre,html) x = 0 for imgurl in imglist: urllib.urlretrieve(imgurl,'%s.jpg' % x) x+=1 html = getHtml("http://tieba.baidu.com/p/2460150866") print getImg(html)
ここでのコアは、 urllib.urlretrieve() メソッドを使用して、リモート データをローカルに直接ダウンロードします。
取得した画像の接続を for ループでたどります。画像のファイル名をより標準化するために、名前を変更するルールは x 変数に 1 を追加します。保存場所のデフォルトは、プログラムの保存ディレクトリです。
プログラムが完了すると、ローカルディレクトリにダウンロードされたファイルがディレクトリに表示されます。