Pythonは簡単なクローラー機能を実装します

高洛峰
リリース: 2016-12-13 13:32:56
オリジナル
1710 人が閲覧しました

毎日インターネットを閲覧していると、素敵な写真を目にすることが多く、その写真を保存してダウンロードしたり、デスクトップの壁紙やデザイン素材として使用したくなります。

最も一般的な方法は、マウスを右クリックして [名前を付けて保存] を選択することです。ただし、一部の画像には、マウスを右クリックしたときに名前を付けて保存するオプションがありません。スクリーンショット ツールを使用してキャプチャすることもできますが、これにより画像の鮮明さが低下します。よし〜!実際、右クリックしてページのソース コードを表示するのは非常に便利です。

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”

Pythonは簡単なクローラー機能を実装します

コードを次のように変更します:

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 を追加します。保存場所のデフォルトは、プログラムの保存ディレクトリです。

プログラムが完了すると、ローカルディレクトリにダウンロードされたファイルがディレクトリに表示されます。

Pythonは簡単なクローラー機能を実装します

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート