什么貓咪最受歡迎?Python爬取全網(wǎng)貓咪圖片,哪一款是你最愛的

前言

采集目標

網(wǎng)頁資源地址:https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%A8%DF%E4%CD%BC%C6%AC&fr=ala&ala=1&alatpl=normal&pos=0&dyTabStr=MCwzLDYsNSwxLDQsOCw3LDIsOQ%3D%3D

工具準備

開發(fā)工具:pycharm
開發(fā)環(huán)境:python3.7, Windows11使用工具包:requests

項目思路解析

做爬蟲案例首先需要明確自己的采集目標,白又白這里采集的是當前網(wǎng)頁的所有圖片信息,有目標后梳理自己的代碼編寫流程,爬蟲的基本四步驟:

  • 第一步:獲取到網(wǎng)頁資源地址
  • 第二步:對地址發(fā)送網(wǎng)絡請求
  • 第三步:提取對應數(shù)據(jù)信息
    • 提取數(shù)據(jù)的方式一般有正則、xpath、bs4、jsonpath、css選擇器
  • 第四步:保存數(shù)據(jù)信息
  • 第一步:找數(shù)據(jù)地址

    數(shù)據(jù)的加載方式一般有兩種,一種靜態(tài)一種動態(tài),當前網(wǎng)頁的數(shù)據(jù)在往下刷新時不斷的加載數(shù)據(jù),可以判斷出數(shù)據(jù)加載的方式為動態(tài)的,動態(tài)數(shù)據(jù)需要通過瀏覽器的抓包工具獲取,鼠標右擊點擊檢查,或者按f12的快捷方式,找到加載的數(shù)據(jù)地址

    找到對應數(shù)據(jù)地址,點擊彈出的接口后可以點擊預覽,預覽打開的頁面是展示給我們的數(shù)據(jù),在數(shù)據(jù)多的時候通過他來進行查看,獲取的數(shù)據(jù)是通過網(wǎng)址獲取的,網(wǎng)址數(shù)據(jù)在請求里,對網(wǎng)址發(fā)送網(wǎng)絡請求

    第二步:代碼發(fā)送網(wǎng)絡請求

    發(fā)送請求的工具包會非常多,入門階段更多的是使用requests工具包,requests是第三方工具包,需要進行下載:pip install requests 發(fā)送請求時需要注意我們通過代碼請求,web服務器會根據(jù)http請求報文來進行區(qū)分是瀏覽器還是爬蟲,爬蟲不受歡迎的,爬蟲代碼需要對自己進行偽裝,發(fā)送請求時帶上headers傳輸?shù)臄?shù)據(jù)類型為字典鍵值對,ua字段是非常重要的瀏覽器的身份證

    第三步:提取數(shù)據(jù)

    當前獲取的數(shù)據(jù)為動態(tài)數(shù)據(jù),動態(tài)數(shù)據(jù)動態(tài)數(shù)據(jù)一般都是json數(shù)據(jù),json數(shù)據(jù)可以通過jsonpath直接提取,也可以直接轉換成字典,通過Python提取最終的目的是提取到圖片的url地址

    提取出新的地址后需要再次對網(wǎng)址發(fā)送請求,我們需要的是圖片數(shù)據(jù),鏈接一般是保存在數(shù)據(jù)中,發(fā)送請求獲取圖片對應的進制數(shù)據(jù)

    第四步: 保存數(shù)據(jù)

    數(shù)據(jù)獲取到之后將數(shù)據(jù)進行儲存,選擇自己數(shù)據(jù)儲存的位置,選擇寫入方式,我們獲取的數(shù)據(jù)是進制數(shù)據(jù),文件訪問模式用的wb,將獲取到的圖片進入數(shù)據(jù)寫入就行,文件的后綴需要是圖片結尾的后綴,可以選擇用標題命名,白又白使用網(wǎng)址后部分進行命名。

    簡易源碼分享

    import requests # 導入請求的工具包import re # 正則匹配工具包# 添加請求頭headers = { # 用戶代理 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36", # 請求數(shù)據(jù)來源 # "Referer": "https://tupian.baidu.com/search/index", # "Host": "tupian.baidu.com"}key = input("請輸入要下載的圖片:")# 保存圖片的地址path = r"圖片/"# 請求數(shù)據(jù)接口for i in range(5, 50): url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=12114112735054631287&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E7%8C%AB%E5%92%AA&queryWord=%E7%8C%AB%E5%92%AA&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=120&rn=30&gsm=78&1635836468641=" # 發(fā)送請求 response = requests.get(url, headers=headers) print(response.text) # 正則匹配數(shù)據(jù) url_list = re.findall('"thumbURL":"(.*?)",', response.text) print(url_list) # 循環(huán)取出圖片url 和 name for new_url in url_list: # 再次對圖片發(fā)送請求 result = requests.get(new_url).content # 分割網(wǎng)址獲取圖片名字 name = new_url.split("/")[-1] print(name) # 寫入文件 with open(path + name, "wb")as f: f.write(result)

    我是白又白i,一名喜歡分享知識的程序媛??感興趣的可以關注我的公眾號:白又白學Python【非常感謝你的點贊、收藏、關注、評論,一鍵三連支持】

    ?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
    【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
    平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

    相關閱讀更多精彩內容

    友情鏈接更多精彩內容