ホームページ  >  記事  >  バックエンド開発  >  Python クローラー [1] 女の子の画像を一括ダウンロード

Python クローラー [1] 女の子の画像を一括ダウンロード

PHPz
PHPzオリジナル
2017-04-04 10:49:545074ブラウズ

Jiedan.com の女の子の写真特集には、非常に高品質の美女が揃っています写真を今すぐ共有してください Python これらの女の子の写真を一括ダウンロードする方法

知っておくべき知識とツール:

#1 この記事では、list の操作方法を知る必要があります。 ,...in... については、関数を定義する方法だけで十分です。

#2を使用しながら、3番目をインストールする必要があります。 -party library BeautifulSoup4. pip を使用したインストールは、Windows で Windows + x ショートカット キーを押して (管理者) と入力する非常に便利な方法です。

pip install beautifulsoup4

を実行して Enter キーを押します。

Python クローラー [1] 女の子の画像を一括ダウンロード


のようなメッセージが表示されたら、インストールが完了したことを意味します

#3

ただし、ブラウザchrome や Firefox などの要素が必要です (pip をお持ちでない場合は、検索 pip のインストール方法をご覧ください)

1. Web ページをダウンロードします。 2,000 を超える Web ページ上のすべての画像をダウンロードしたい場合は、まず Web ページのダウンロード方法を学習する必要があります:) ダウンロード URL は次のとおりです: jandan.net/ooxx/page-2397#comments。 chrome または Firefox ブラウザで右クリックし、Web ページのソース コードを表示します。Web ページは、HTML、js、CSS などで記述されたソース コードを解析して表示されます。画像のアドレスは、これらのソース コードなので、最初のステップは、これらの HTML コード


Python クローラー [1] 女の子の画像を一括ダウンロード



の一部をダウンロードすることです。

ビルドされたPythonを使用します-ライブラリ urllib.request で Web ページをダウンロードします。 lib.request は、複数のプロトコルを使用するライブラリです。 開いている URL にアクセスするための拡張可能なライブラリです。 urllib.request

Python クローラー [1] 女の子の画像を一括ダウンロード
をインポートします。 url = 'http://jandan.net/ooxx /page-2397#comments'


res = urllib.request.urlopen(url)

urllib.request.urlopen() この関数は何をしますか?その名前が示すように、URL を開くために使用できます。 str (渡したもの) または Request

オブジェクト

のいずれかを受け入れることができます。この関数の戻り値は常に、コンテキスト マネージャーのように機能するオブジェクトであり、geturl()、info()、getcode() などの独自のメソッドがあります。

実際、それほど心配する必要はありません。この関数は URL を受け入れ、このオブジェクトに対して操作を行うことで、その URL のすべての情報を含むオブジェクトを返すことができるということだけを覚えておいてください。


次に、res オブジェクト内の HTML コードを読み出して、

変数
html に代入します。 res.read() メソッドを使用します。

html = res.read()このとき、htmlのソースコードはhtmlに格納されます!

コードの一部をインターセプトするには、

print
(html)


を試してください。

この時点で、マウスを右クリックしたときに表示される結果とは異なることがわかります。Web ページのソース コードを表示します。 read() メソッドの戻り値は n バイトであることがわかりました...これは一体何ですか? 実際には、この戻り値を解析して画像アドレスを取得できます。ただし、ブラウザに表示されているものと同じ HTML コードを取得したい場合は、コードの前の行を

html = res.read().decode('utf-8')
に変更できます。

次に、 print(html)


Python クローラー [1] 女の子の画像を一括ダウンロード


を実行して、コードの一部をインターセプトします。

OK!同様に、これは read() の decode('utf-8') が read() の戻り値を utf-8 でエンコードできるためです。ただし、必要な情報も含まれているため、引き続き html = res.read() を使用します。

これまでのところ、Web ページ http://jandan.net/ooxx/page-2397#comments の HTML コードをダウンロードして変数 html に保存するために使用した Python コードは 4 行だけです。次のように:

import urllib.request

#Webページをダウンロード

url = 'http://jandan.net/ooxx/page-2397#comments'

res = urllib.request.urlopen(url)

html = res.read()

2. アドレスを解析します

次に、Beautifulsoup4 を使用して HTML を解析します。

特定の画像に対応する HTML コードがどこにあるかを確認するにはどうすればよいですか?ページを右クリックして、「検査」をクリックします。このとき、画面の左半分は元のWebページ、画面の右半分はHTMLコードとたくさんの機能ボタンです。


Python クローラー [1] 女の子の画像を一括ダウンロード


要素 左側に選択矢印があり、それを青色に変えます。次に、左側の Web ページの画像をクリックすると、コードの一部が自動的に実行されることがわかります。右側の HTML コードで強調表示されています。コードのこの部分は、この画像に対応する HTML コードです。この矢印は、Web ページ内の要素に対応するコードを見つけるために使用されます。


Python クローラー [1] 女の子の画像を一括ダウンロード


このコードを注意深く見てください:

src="//wx2.sinaimg.cn/mw600/66b3de17gy1fdrf0wcuscj20p60zktad.jpg" がわかります。 部分はこの写真のアドレスです、 srcはソースです。 src の後のスタイルはそのスタイルです。気にしないでください。この時点で試してみて、src の前に http: を追加し、http://wx2.sinaimg.cn/mw600/66b3de17gy1fdrf0wcuscj20p60zktad.jpg にアクセスすると、元の画像が表示されるはずです。


つまり、srcに対応するコンテンツが必要な画像リンクアドレスです。この図では、src と画像アドレスのリンク、スタイル、

max-widthkey-value に似ていることに注意してください。これは、後で画像のアドレスを抽出するために使用される方法に関連します。

他の画像に対応するコードを見ると、それらの形式が同じであることがわかります。つまり、それらはすべて

に含まれています。

BeautifulSoup()を使用してHTMLを解析します。 html を渡すことに加えて、「html.parser」パラメータも渡します。これは、BeautifulSoup() 関数が html の解析方法に従って変数 html を解析することを示します。パーサーとは構文解析のことです。


soup = BeautifulSoup(html,'html.parser')

このコード行は、HTML をスープ オブジェクトに解析します。このオブジェクトを非常に便利に操作できます。たとえば、「img」を含むテキスト コンテンツのみを抽出します。

result =Soup.find_all('img')


find_all() メソッドを使用します。

print(result) 結果はリストであり、各要素は src-image アドレスのキーと値のペアですが、 やその他の不要なコンテンツが含まれていることがわかります。


Python クローラー [1] 女の子の画像を一括ダウンロード


コードの一部を傍受しました。

get メソッドを使用して二重引用符で囲まれたアドレスを抽出し、先頭に http: を追加します。

links=[]


結果のコンテンツの場合:

links.app

end('http:'+content.get('src'))

content.get('src') is コンテンツ内のキー src に対応する値 (二重引用符で囲まれたアドレス) を取得します。

links.append() は、リストに要素を追加する一般的なメソッドです。

print(links) このリストの各要素は、二重引用符で囲まれた元の画像アドレスであることがわかります。以下に示すように:


Python クローラー [1] 女の子の画像を一括ダウンロード


コードの一部が傍受されました

ブラウザを使用して任意のアドレスを開くと、対応する画像が表示されます。よ!これは、ダウンロードという最後のステップに入ったことを意味します。


アドレス抽出部分が完了しました。コードも次のように非常に簡潔です:

#ウェブページを解析

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'html.parser')

result =Soup.find_all('img')

links=[]

結果のコンテンツ:

Links.append('http:'+content.get('src'))

3. 画像をダウンロードします

最後に、画像をダウンロードするためにリンク内のアドレスにアクセスします。 !

はじめに

import os

まず、ダウンロードした写真を保存するための写真フォルダーを作成します。次のコードは、このプログラムの .py ファイルが配置される場所に写真フォルダーを作成します。

if not os.path.exists('photo'):

os.makedirs('photo')

リンクはリストであることがわかっているので、loopを使用するのが最善ですそれを一つずつ行う ダウンロード、名前、保存。



i=0

リンク内のリンク:

i+=1

filename ='photo\'+'photo'+str(i)+'.png'

with open(filename,'w') as file:

urllib.request.urlretrieve(link,filename)

i はループ変数、i+=1 はループを制御するステートメントです。

filename は画像に名前を付けますが、実際には最初にこの名前でファイルを作成してから、そこに画像を書き込みます。ファイル名の割り当てステートメントからわかるように、「photo\」はそれが写真フォルダー内にあることを示し、その後ろにある「photo」+str(i) は完全なダウンロードが完了した後の順序です。 photo1、photo2、photo3 のようになります。 ~ '.png' が接尾辞です。 + 記号を使用して strings を接続することも、Python では一般的な方法です。

これら 2 行のステートメントを使用して、リンク内のアドレスが指す画像をローカルで取得し、それを filename に保存します。

open(filename,'w')、フォルダー filename を開きます。'w' は、開くメソッドが write であることを意味します。つまり、open() はここで 2 つのパラメータを受け入れます。1 つはファイル名 (ファイル パス)、もう 1 つは開く方法です。

urllib.request.urlretrieve(link,filename) の機能は、リンク link にアクセスし、コピーを取得して filename に入れることです。

3 つの部分を記述したら、[実行] をクリックします。 .py ファイルがあるパスに写真フォルダーがあり、ダウンロードした写真がたくさん入っています~


Python クローラー [1] 女の子の画像を一括ダウンロード


完全なコードは次のとおりです:

import urllib .request

from bs4 import BeautifulSoup

import os

#ウェブページをダウンロード

url = 'http://jandan.net/ooxx/page-2397#comments'

res = urllib.request.urlopen(url )

html = res.read()

#ウェブページを解析

soup = BeautifulSoup(html,'html.parser')

result =Soup.find_all('img')

links=[]

for結果のコンテンツ:

リンク .append('http:'+content.get('src'))

#写真をダウンロードして保存

そうでない場合は os.path.exists('photo'):

os。 makedirs('photo')

i=0

リンク内のリンク:

i+=1

filename ='photo\'+'photo'+str(i)+'.png'

with open( filename,'w') as file:

urllib.request.urlretrieve(link,filename)

この小さなプログラムは、上から下まで、関数が定義されていません。これは初心者にとっては理解しやすいかもしれません。

女の子の写真へのリンク

http://jandan.net/ooxx/page-2397#comments 真ん中の数字のみ1〜2XXXの間で変化します。

url = 'http://jandan.net/ooxx/page-'+str(i)+'#comments'

iの値を一括ダウンロードに変更します。ただし、この Web サイトに頻繁にアクセスすると IP がブロックされる可能性があるというコメントもあります。これは私には理解できません。実際に試してみてください。

以上がPython クローラー [1] 女の子の画像を一括ダウンロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。