ホームページ >バックエンド開発 >Python チュートリアル >Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

高洛峰
高洛峰オリジナル
2017-03-24 16:26:363640ブラウズ

Python がこれほど強力で魅力的だとは思いませんでした。以前は写真を見て 1 つずつコピーして貼り付けていましたが、Python を学習すると、プログラムを使用して写真を 1 つずつ保存できるようになります。以下の記事では主に、Python3.6 を使用して Sogou 画像 Web ページから画像をクロールするための関連情報を紹介します。必要な方は参考にしてください。

はじめに

ここ数日、私はずっと興味があったクローラーアルゴリズムについて勉強してきました。ここ数日で感じたことをいくつか書き留めておきます。以下のテキストを入力してください:

ここでは、クロール オブジェクトとして sogou を使用します。

まず、Sogou Pictures に入り、壁紙カテゴリに入ります (もちろん、これは単なる例です Q_Q)。特定の Web サイト情報をクロールする必要がある場合は、それについて事前に理解する必要があるためです...

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

入力したらこれです、そしてF12で開発者向けオプションを入力します Chromeを使用しています。

画像を右クリック>>チェック

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

必要な画像のsrcがimgタグの下にあることがわかったので、最初にPythonリクエストを使用してコンポーネントを抽出し、次にsrcを取得しようとしましたimg を作成し、urllib.request.urlretrieve を使用して、データをバッチで取得する目的を達成するために、画像を 1 つずつダウンロードします。このアイデアは、クロールする URL が http://pic であることをプログラムに伝える必要があります。 sogou.com/pics/recommend?category=%B1%DA%D6%BD 、この URL はカテゴリに入った後のアドレス バーから取得されます。 URL アドレスを理解したので、楽しいコーディングを始めましょう:

このクローラー プログラムを作成するときは、操作のすべてのステップが正しいことを確認するために段階的にデバッグするのが最善です。これは良い習慣でもあります。プログラマーはそうすべきです。著者は私がプログラマーであるかどうか知りません。この URL が指す Web ページを分析してみましょう。

import requests
import urllib
from bs4 import BeautifulSoup
res = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')
soup = BeautifulSoup(res.text,'html.parser')
print(soup.select('img'))

出力:

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

出力コンテンツには必要な画像要素が含まれておらず、ロゴの画像のみが解析されていることがわかります。これは明らかに私たちが望むものではありません。つまり、必要な画像情報が URL http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD に含まれていません。したがって、注意深い学生は、Web ページ上でマウス ホイールを下にスライドすると、画像が動的に更新される、つまり、Web ページがすべてのリソースを一度にロードしないことに気づくかもしれません。ただし、リソースを動的にロードします。これにより、Web ページが肥大化して読み込み速度に影響が出るのを防ぐこともできます。私たちはすべての写真の本当の URL を見つけたいと考えています。著者はこれに慣れていないため、これを見つけることにあまり慣れていません。最後に見つかった場所は、F12>>ネットワーク>>XHR>>(XHR の下のファイルをクリック)>>プレビューです。

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

all_items をクリックすると、必要な要素に少し近いことがわかりました。次のものが 0 1 2 3... 1 つずつ画像要素であることがわかりました。 URLを開いてみてください。それは本当に写真のアドレスだったことがわかりました。ターゲットを見つけた後。 XHR

の下のヘッダーをクリックして2行目を取得します

リクエストURL:

http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA %B8&tag =%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864、いくつかの不要な部分を削除してみてください。秘訣は、削除できる部分を削除しても、アクセスには影響しないということです。著者自ら上映。取得した最終 URL: http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start =0&len=15 文字通りの意味で、カテゴリの後に分類が続く可能性があることを知っています。 start は開始添字、len は長さ、つまりピクチャの数です。さて、楽しいコーディングの時間を始めましょう:

開発環境は Win7 Python 3.6 です。Python は実行時にリクエストをインストールする必要があります

Python3.6 リクエストをインストールするには、CMD を入力する必要があります:

pip install requests

作者はデバッグも行っています。ここに書いているので、最終的なコードはここに掲載されています:

import requests
import json
import urllib

def getSogouImag(category,length,path):
 n = length
 cate = category
 imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n))
 jd = json.loads(imgs.text)
 jd = jd['all_items']
 imgs_url = []
 for j in jd:
  imgs_url.append(j['bthumbUrl'])
 m = 0
 for img_url in imgs_url:
   print('***** '+str(m)+'.jpg *****'+' Downloading...')
   urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')
   m = m + 1
 print('Download complete!')

getSogouImag('壁纸',2000,'d:/download/壁纸/')

プログラムが実行を開始したとき、作者はまだ少し興奮していました。ぜひ感じてみてください:

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

Web ページから Sogou 画像をクロールする Python の方法の詳細な説明

以上で、クローラプログラムのプログラミング手順の説明は完了です。全体として、要素をクロールする必要がある URL を見つけることが、クロールの多くの側面で鍵となります

以上がWeb ページから Sogou 画像をクロールする Python の方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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