初心者のXiaobaiに、Pythonを使用して女神の写真を5分でクロールする方法を教えてください!

今日は花びらの網を這うつもりですhttps://huaban.com/
デザイナーがインスピレーションを見つけるための楽園!ダウンロードする画像素材は膨大で、高品質の画像インスピレーションライブラリです

今回はリクエストを使ってペタルネットにログインし、ページをクロールし、regularとjsonを使って有用な情報を抽出し、最後に取得した画像情報をローカルに保存します

1.使用するテクノロジー

  • pythonの基本
  • セッションユーザーセッションを取得し、写真をダウンロードするためにログインページを要求します
  • ページから有用な情報を抽出するための正規表現
  • jsonはページ内の画像を解析します

2.ターゲットページ

https://huaban.com/search/?q=女神&category = photography

3.結果

第四に、必要なライブラリをインストールします

  • win + Rを開いて実行する
  • cmdをコンソールに出力します
  • リクエストを個別にインストールする
pipインストールリクエスト
1

5、分析ページ

 

  1. ページパターン
    ページングボタンをクリックして、
    ページの最後のパラメータのパターンを取得します。最初のページ:https
    ://huaban.com/search/?q = Goddess&category = photography&page = 1 2番目のページ:https://huaban.com / search /?q = Goddess&category = photography&page = 2

2.ログイン

Fiddlerを介して、ログイン要求のアドレスとパラメーターを表示します

#地址
https://huaban.com/auth/#
参数
 "email": "******"、
 "password": "*****"、
 "_ref": "frame" 
123456

ユーザーがログインした後、リクエストのsession()関数を使用してセッション情報を取得することにしました。

3.ページ情報

右クリックしてソースコードを表示すると、データがjavascriptに保存されていることがわかります。通常の式を使用して、ページ情報を抽出します。

6、すべてのコード

#-*-coding:utf-8-*-
インポートリクエスト
import re 
import json 
#インポートリクエストre-regular json 

'' ' 
login 
login petals get session 
' '' 
def login():
    login_url = 'https://huaban.com / auth / ' 
    #ログインアドレス
    ヘッダー= { 
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64; rv:78.0)Gecko / 20100101 Firefox / 78.0"、
        "Accept": "application / json" 、
        "コンテンツタイプ": "アプリケーション/ x-www-form-urlencodedで;のcharset = UTF-8"、
        "リファラー": "https://huaban.com/" 
    } 
    #リクエストヘッダ情報

    セッション=要求します。session()
    #sesson 会话

    login_data = {
        "email": "zengmumu%40126.com"、
        ページを取得情報(「美しさ」のテキストエンコーディングの結果は「%E5%A5%B3%E7%A5%9E」です)
        "password": "zmm123"、
        "_ref": "frame" 
    } 

    response = session.post(login_url、data = login_data、headers = headers、verify = False)
    #ログインページ
    getPic(session、5)
    #前に画像を取得5ページ


'' ' 
getPic
はページ
セッションセッション情報の画像アドレスを解析します
numは最大ページ数です
' '' 
def getPic(session、num):
    for i in range(1、num + 1):
        response = session.get( " https://huaban.com/search/?q=%E5%A5%B3%E7%A5%9E&category=photography&page="+str(i))data
        data = re.search( 'app \ .page \ [\ "pins \" \] =(。*); \ napp.page \ [\ "page \" \]'、response.text、re.M | re .I | re.S)
        #現在のページが配置されているすべての画像情報を抽出します
        data = json.loads(data.group(1))
        #文字列を
        データ内のアイテムのリストに変換します:
            url = "https:// hbimg。 huabanimg.com/ "+ item [" file "] [" key "] 
            #スプライシング画像アドレス
            index = item [" file "] [" type "]。rfind(" / ")
            type ="。 "+ item [" file "] [" type "] [index + 1:] 
            #画像のタイプを取得
            file_name = item [" raw_text "] 
            #画像の中国語名を取得
            download_img(url、file_name、type) 
            #画像をダウンロードする

'' '
画像の
URLをダウンロードする
画像名のアドレス画像の中国語名 
type picture type 
' '' 
def download_img(url、name、type):
    response = requests.get(url、verify = False) 
    #リクエストを使用して写真をダウンロードします
    index = url.rfind( '/')
    file_name = name + url [index + 1:] + typeのハッシュ値を取得します
    print( "Download picture:" + file_name)
    #画像の名前を
    出力save_name = "./photo/" + file_name 
    #画像が保存されるアドレス(写真を自分で作成する必要があることに注意してください。現在の.pyファイルと同じフォルダー)
    。open(save_name、 "wb")をf:
        fとして指定します。.write(response.content)
        #ローカルに画像を書き込み
ます
`` 'メイン関数を定義します
' '' 
def main():
    login()

#モジュールの名前が__main__の場合、
__ name__ == '__ main__'の場合はメインのメイン関数を実行します
    main()

とてもシンプルですか、コメントはすべてコードにあります。ご不明な点がございましたら、エクスチェンジに参加して回答ベースにご参加ください。⬅彼をクリック

 

おすすめ

転載: blog.csdn.net/weixin_43881394/article/details/109072117