目錄
1. 編者按
2. 專案概述-F1圖片爬取
3. 詳細步驟說明
3.1 獲取URL地址
3.1.1 注釋陳述句說明
3.1.2 匯入庫
3.1.3 獲取URL
3.2 檢查網頁獲取圖片下載地址
3.3 使用正則方法獲取地址
3.4 UA反爬蟲
3.5 使用os建立指定路徑的檔案夾
3.6 遍歷串列批量存盤
4. 運行結果
5. 結論
1. 編者按
作為中年大叔本叔,在積累了10年工程經驗后一直幻想出圈,爬蟲作為其中的一項必備技能,最近一周一直在孜孜不倦的學習Python和爬蟲這也是我開辟這個中年大叔學Python專欄的原因,
不忘初心,砥礪前行,
使用的知識包括:
- 為了實作對地址的快速獲取,本文使用了正則方法,具體使用.*?和(.*?)方法;
- 為了存盤檔案,匯入os庫,進行檔案夾的建立;
- 匯入的庫包括:os,re和requests,
2. 專案概述-F1圖片爬取
由于大叔本人是一個F1車迷,所以,本次爬蟲的第一個專案就是爬取圖片網站的F1賽車圖片,
具體步驟分為:
1. 獲取URL地址:找到一個圖片網站,并搜索得到F1圖片的初步結果;
2. 在瀏覽器按下F12(大叔使用谷歌瀏覽器),并對網頁進行檢查分析,找到每一個圖片對應的地址及地址的分層;
3. 使用正則方法獲取圖片下載地址的字串,并形成串列list;
4. 使用os建立空檔案夾
5. 遍歷串列,并存盤圖片至指定檔案夾,
3. 詳細步驟說明
3.1 獲取URL地址
3.1.1 注釋陳述句說明
撰寫開頭的說明檔案,至于為何要撰寫這兩行注釋代碼,且聽下回分解
#!/usr/bin/python
# -*- coding: utf-8 -*-
3.1.2 匯入庫
匯入os、re和requests庫,
import requests
import re
import os
3.1.3 獲取URL
在bing搜索引擎(抵制百度,從我做起!)搜索F1,得到圖片網站地址,并進入網站搜索F1,得到以下頁面:

說實話,雖然網站畫風詭異,頗有后現代上世紀90年代初設計風格,但是,看到紅色法拉利,還是口中默念沃法已完,哎,并且將該地址賦值給字串變數url
# 指定URL
url = 'https://www.ivsky.com/search.php?q=F1'
3.2 檢查網頁獲取圖片下載地址
對該網頁,按下F12進行網頁檢查,逐個找到網頁中對應圖片的下載地址,這里有個使用技巧,當滑鼠放在某個代碼段時,在網頁相應的作用區域會變成藍色,暗示你編輯的是本段內容,所以,通過逐層篩選,很快就可以找到對應的代碼段,

通過上圖可以看到,每一組<li>...<li>對應一個圖片,
拷貝一組class對應圖片的element值,
<div class="il_img pic_box"><a href="/tupian/f1_saiche_v54804/pic_856952.html" target="_blank"><img src="https://img.ivsky.com/img/tupian/t/201812/28/f1saiche-013.jpg" alt="賽場上的F1賽車圖片 4239x1804"></a></div>
3.3 使用正則方法獲取地址
從上面字串分析,其中的img src為圖片的地址,即字串中標識的紅色部分,下面采用正則方法獲取全部div class=il_img pic_box類中img src字串內容,并存入串列,
在正則方法使用時,使用.*?方法和(.*?)方法,
ex = '<div class="il_img pic_box">.*?<img src="(.*?)" alt=.*?</div>' img_src = re.findall(ex,page_txt,re.S) # 如果正則作用在資料決議環節中,則使用re.S
上述正則運算式表示的含義是:
ex為回傳值,回傳是串列,串列中每一個元素都是img src中的內容,
正則運算式查找的內容表示:以<div class="il_img pic_box">.作為開頭,中間各種亂七八糟的內容不管,之后為<img src=“”的內容,雙引號內為(.*?)表示需要提取的內容,
此部分的代碼為:
# 對頁面中所有的圖進行決議
ex = '<div class="il_img pic_box">.*?<img src="(.*?)" alt=.*?</div>'
img_src = re.findall(ex,page_txt,re.S) # 如果正則作用在資料決議環節中,則使用re.S
由此得到ex反饋的串列值img_src,列印出結果看一下:

3.4 UA反爬蟲
UA 偽裝:將對應的user agent封裝到一個字典中,并且在獲取頁面時,作為變數反饋,
如果不加UA偽裝,則python發起的獲取網路連接在Network屬性中會顯示使用python發起,從而被網站堵截,
# UA 偽裝:將對應的user agent封裝到一個字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
}
# 獲取整張頁面對應的原始碼資料
page_txt = requests.get(url=url,headers=headers).text
3.5 使用os建立指定路徑的檔案夾
在創建檔案夾之前先判讀是否該檔案夾已經存在,即使用os.path.exists()來判斷,如果沒有則使用os.mkdir()函式來建立,
# 創建一個檔案夾,保存全部圖片
if not os.path.exists('D:/Data-SD/F1圖片保存'):
os.mkdir('D:/Data-SD/F1圖片保存')
3.6 遍歷串列批量存盤
所有準備作業已經完成,下面開展批量存盤,
遍歷存盤時,以此讀取list中每一個元素,并分為3個步驟開展后續設計:
1. 圖片資料使用二進制形式進行獲取,即使用request.get().content
2. 為了實作圖片存盤,對圖片的名稱進行設定,圖片名稱按照網站獲取的檔案名稱來命名,使用split()函式進行分解并取最后一個元素作為檔案名;
3. 按照wb形式,寫入檔案,并提示進度,
for src in img_src:
img_data = requests.get(url=src,headers=headers).content
# 生成圖片名稱
imgname = src.split('/')[-1]
imgPath = 'D:/Data-SD/F1圖片保存/'+imgname
with open(imgPath,'wb') as fp:
fp.write(img_data)
print(imgname,'下載成功\n')
4. 運行結果
在運行界面顯示已經完成圖片存盤,

目標檔案夾內容:

5. 結論
原來昨天想爬取下航天集團的網站,獲取我國火箭歷年發射時間和次數,但是上網站卻發現人家網站是表格形式的,,,還需要看下如何爬取網頁表格資料,后面繼續學習繼續更新,歡迎大家關注和支持,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266675.html
標籤:python
