爬取了那麼多資料資訊,今天我們換個口味,爬取圖片連結並將其下載到本地裡,下面我們來下百度百科和京東的圖片,廢話不多說,直接上案例:
開啟這個網址我們檢查下圖片和網頁原始碼,規律如下:
觀察了圖片格式之後,我們可以開始定義函式並設定爬取的正則了:
import requests
import re
import urllib.request
#模擬成瀏覽器
headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" }
#定義爬取貼吧圖片並下載的函式 (https://tieba.baidu.com/p/3823765471)
def req_tieba_img(url):
html = requests.get(url, headers=headers)#請求頁面原始碼
html.encoding = "utf-8" #設定編碼
response = html.text #轉換成文字形式
#爬取圖片的正規表示式
reg = r'<img class="BDE_Image" src="(.*?\.jpg)"'
data = re.compile(reg, re.S).findall(response) #預編譯並執行查詢
x = 1
for img in data:
img_name = r"C:/Users/Administrator/Desktop/baike/"+ str(x) +".jpg"
print("正在寫入第 "+ str(x) +" 張圖片...")
try:
with open(img_name,"wb") as f: #將圖片儲存如本地
f.write(requests.get(img).content) #這個必須要先請求圖片而不僅僅是放入的是連結而已
except Exception as e: #即使丟擲異常對我們的重新命名圖片也沒有影響
x += 1
x += 1 #自增
#呼叫
url = "https://tieba.baidu.com/p/3823765471"
req_tieba_img(url)
我們執行爬蟲檔案之後效果如下:
開啟網頁我們在檢查中觀察我們要抓取的圖片列表所在的區域,因為京東頁面圖片太多,因此待會兒我們爬取的時候先定位我們需要爬取的區域(注:區域定位有個開始和結束位置,並且這個兩個標誌必須唯一),然後再找個區域裡面爬取圖片,頁面觀察圖:
知道規律之後我們開始敲程式碼了:
#定義爬取京東手機圖片並下載的函式
def req_jingdong_img(url, page):
#請求頁面原始碼
html = requests.get(url, headers=headers)
html.encoding = "utf-8" #設定編碼
response = html.text #轉換成文字形式
#指定爬取的資料範圍及過濾掉部分沒必要的資訊
reg1 = r'<div id="plist".+?<div class="page clearfix">' #設定正規表示式
data1 = re.compile(reg1, re.S).findall(response) #預編譯並且執行
#抓取jpg圖片連結
reg2 = r'<img width="220" height="220" data-img="1" src="//(.*?\.jpg)"'
list_img = re.compile(reg2, re.S).findall(data1[0])
x = 1
for imgurl in list_img:
image_name = "C:\\Users\\Administrator\\Desktop\\jingdongimg\\"+ str(page) + str(x) +".jpg" #拼接下載之後圖片的名字
imgurl = "http://"+ imgurl #在瀏覽器中開啟觀察位址列中的圖片連結
print("正在寫入第 "+ str(page)+" 頁第 "+ str(x) +" 張圖片")
try:
urllib.request.urlretrieve(imgurl, filename=image_name)#這個方式自帶請求圖片
except Exception as e:
x += 1
x += 1
#呼叫
for i in range(1,67):#請求66頁的圖片
url = "https://list.jd.com/list.html?cat=9987,653,655&page="+ str(i)
req_jingdong_img(url, i)
執行之後效果圖如下:
哈哈哈,圖片爬取和下載就是這樣了,爬取網站千變萬化,但是使用的核心技術還是一個原理,希望對您有幫助,歡迎留言!