什麼貓咪最受歡迎?Python爬取全網貓咪圖片,哪一款是你最愛的

工具準備

開發工具:pycharm

開發環境:python3。7, Windows11

使用工具包:requests

專案思路解析

做爬蟲案例首先需要明確自己的採集目標,白又白這裡採集的是當前網頁的所有圖片資訊,有目標後梳理自己的程式碼編寫流程,爬蟲的基本四步驟:

第一步:獲取到網頁資源地址

第二步:對地址傳送網路請求

第三步:提取對應資料資訊

提取資料的方式一般有正則、xpath、bs4、jsonpath、css選擇器

第四步:儲存資料資訊

第一步:找資料地址

資料的載入方式一般有兩種,一種靜態一種動態,當前網頁的資料在往下重新整理時不斷的載入資料,可以判斷出資料載入的方式為動態的,動態資料需要透過瀏覽器的抓包工具獲取,滑鼠右擊點選檢查,或者按f12的快捷方式,找到載入的資料地址

什麼貓咪最受歡迎?Python爬取全網貓咪圖片,哪一款是你最愛的

找到對應資料地址,點選彈出的介面後可以點選預覽,預覽開啟的頁面是展示給我們的資料,在資料多的時候透過他來進行檢視,獲取的資料是透過網址獲取的,網址資料在請求裡,對網址傳送網路請求

第二步:程式碼傳送網路請求

傳送請求的工具包會非常多,入門階段更多的是使用requests工具包,requests是第三方工具包,需要進行下載:pip install requests 傳送請求時需要注意我們透過程式碼請求,web伺服器會根據http請求報文來進行區分是瀏覽器還是爬蟲,爬蟲不受歡迎的,爬蟲程式碼需要對自己進行偽裝,傳送請求時帶上headers傳輸的資料型別為字典鍵值對,ua欄位是非常重要的瀏覽器的身份證

第三步:提取資料

當前獲取的資料為動態資料,動態資料動態資料一般都是json資料,json資料可以透過jsonpath直接提取,也可以直接轉換成字典,透過Python提取最終的目的是提取到圖片的url地址

什麼貓咪最受歡迎?Python爬取全網貓咪圖片,哪一款是你最愛的

什麼貓咪最受歡迎?Python爬取全網貓咪圖片,哪一款是你最愛的

提取出新的地址後需要再次對網址傳送請求,我們需要的是圖片資料,連結一般是儲存在資料中,傳送請求獲取圖片對應的進位制資料

第四步: 儲存資料

資料獲取到之後將資料進行儲存,選擇自己資料儲存的位置,選擇寫入方式,我們獲取的資料是進位制資料,檔案訪問模式用的wb,將獲取到的圖片進入資料寫入就行,檔案的字尾需要是圖片結尾的字尾,可以選擇用標題命名,白又白使用網址後部分進行命名。

簡易原始碼分享

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”, # 請求資料來源 # “Referer”: “https://tupian。baidu。com/search/index”, # “Host”: “tupian。baidu。com”}key = input(“請輸入要下載的圖片:”)# 儲存圖片的地址path = r“圖片/”# 請求資料介面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=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=120&rn=30&gsm=78&1635836468641=” # 傳送請求 response = requests。get(url, headers=headers) print(response。text) # 正則匹配資料 url_list = re。findall(‘“thumbURL”:“(。*?)”,’, response。text) print(url_list) # 迴圈取出圖片url 和 name for new_url in url_list: # 再次對圖片傳送請求 result = requests。get(new_url)。content # 分割網址獲取圖片名字 name = new_url。split(“/”)[-1] print(name) # 寫入檔案 with open(path + name, “wb”)as f: f。write(result)