文章目錄
- 前言
- 一、專案介紹
- 二、開發環境及第三方庫安裝
- 1.開發環境
- 2.第三方庫安裝
- 三、代碼介紹
- 1.網站分析
- 2.爬取思路
- 3.代碼介紹
- 四、結果展示
- 總結
前言
在一位前輩的博客中有提到,帶著目的的學習將會事半功倍,所以在爬蟲學習初期,就從簡單的圖片爬取開始,敬請期待之后的幾篇文章,
由于咱們的目的在于學習而非盈利,所以要好好愛護別人家的服務器,切勿造成服務器Loading過大,謝謝大家,

一、專案介紹
其實小編是個漫畫迷,再加上漫畫其實就是一張張的圖片,正好符合要求,所以本片文章主要介紹如何通過爬蟲下載非VIP的漫畫圖片

二、開發環境及第三方庫安裝
1.開發環境
電腦作業系統:Windows10 專業版開發工具:PyCharm 2020.2
Python版本:Python 3.7.3
2.第三方庫安裝
本片文章所使用到的庫如下:from bs4 import BeautifulSoup as bs # 本次使用BeautifulSoup進行資料清洗
import random #獲取header時使用,每次請求都使用不同的header
import requests as rq #請求資源時使用
import time #防止多次請求間隔太短導致服務器宕機,所以在每次請求后都會休息3秒鐘
import os#用于新建圖片檔案夾和下載圖片
幾個庫的安裝方式都是一樣的,所以咱們就以bs4為例,剩下的就交給大家自己去完成了,
在安裝Python3的前提下,使用快捷鍵win+R打開命令提示符,輸入pip3 install bs4,按下回車即可自動安裝,如果在安裝程序中有錯誤提示,這時候直接找度娘就可以了,獨立解決問題的能力還是挺重要的,

三、代碼介紹
1.網站分析
本篇文章所設計到的網站為https://www.mkzhan.com/,找到自己喜歡的漫畫,小編特別喜歡《斗羅大陸》,所以就對《斗羅大陸》這部漫畫”下手“了,經小編的觀察,規律如下:
(1)這篇漫畫的主目錄URL地址為:https://www.mkzhan.com/211692/
(2)前10章的章節URL地址為:644915.html - 644924.html
(3)每個章節的圖片地址都在Class為lazy-read的img標簽下,使用BeautifuilSoup時直接使用find_all就能找到所有的圖片地址,豈不是美滋滋 - -

2.爬取思路
(1)分別對每一章節的URL地址發起請求
(2)使用BeautifulSoup獲取章節標題和每一張圖片的URL地址,章節標題在創建本地圖片檔案夾時使用,URL地址則是用于請求圖片的二進制資料
(3)根據每一章節的標題在本地創建檔案夾,并將獲取到的圖片二進制資料下載到本地
3.代碼介紹
(1)對目標URL發起請求,并回傳Response物件,供BeautifulSoup使用
# 獲取網頁html
def GetWebInfo(url):
header = GetHeader()
req = rq.get(url, headers=header)
# 請求一次休息3秒,防止網站負擔過大
time.sleep(3)
if req.status_code == 200:
return req
else:
print(time.strftime('%Y-%m-%d %H:%M:%S') + ':request Error')
(2)隨機獲取Requests請求所使用的header
# 隨機獲取header,反爬
def GetHeader():
headers = [ \
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" \
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", \
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", \
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", \
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", \
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", \
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", \
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", \
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", \
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
headerStr = random.choice(headers)
header = {'User-Agent': headerStr}
return header
(3)新建本地檔案夾并下載圖片
# 圖片下載
def DownLoadPicture(pictureUrl, filePath):
dirName = os.path.dirname(filePath)
if not os.path.exists(dirName):
os.makedirs(dirName)
reqPicture = GetWebInfo(pictureUrl)
with open(filePath, 'wb') as f:
f.write(reqPicture.content)
print(time.strftime('%Y-%m-%d %H:%M:%S') + ":下載成功")
四、結果展示
(1)總檔案夾

(2)各個章節的圖片展示

總結
專案就介紹到這里,由于小編剛開始接觸博客和Python,有錯誤或者不當的地方還請幫忙糾正,專案的鏈接為 https://cowtransfer.com/s/7614170ce05242,有興趣的可以自行去下載,謝謝大家

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234899.html
標籤:python
上一篇:python煙花代碼
