一隆檀、代碼
"""
演示攜帶cookie爬取網(wǎng)頁圖片后并下載到本地
"""
# 1.導(dǎo)包
import requests
from bs4 import BeautifulSoup
import os
# 下載文件
# 9.封裝download_image函數(shù) 用于單獨處理下載
def download_image(url, path_name):
print(f"正在下載:{url}")
# 獲取圖片地址
response = requests.get(url)
with open(path_name, "wb") as file:
file.write(response.content)
# # 獲取圖片的二進(jìn)制
print(f"{url}下載完成")
def main():
# 2.設(shè)置url
url = "xxx"
# 3.設(shè)置cookie 爬取的網(wǎng)頁限制年齡訪問 所以必須攜帶cookie設(shè)置年齡字段
headers = {"Cookie": "over18=1"}
# 4.接收響應(yīng)
response = requests.get(url, headers=headers)
# print(response.text)
# 5.根據(jù)狀態(tài)碼判斷網(wǎng)頁是否爬取完成
if response.status_code == 200:
print("爬取成功!")
# 解析網(wǎng)頁
soup = BeautifulSoup(response.text, "html.parser")
spans = soup.find_all("span", class_="article-meta-value")
# print(spans[2].text)
# 文章標(biāo)題
title = spans[2].text
# 6.爬取完成后找到文章標(biāo)題 根據(jù)文章標(biāo)題配合os庫創(chuàng)建目錄images/標(biāo)題名 此處需要判斷目錄是否已經(jīng)創(chuàng)建過了 創(chuàng)建過了就不再創(chuàng)建(做此判斷避免程序報錯)
mdir_file_name = f"images/{title}"
if not os.path.exists(mdir_file_name):
os.makedirs(mdir_file_name)
# 7.找到網(wǎng)頁上的所有img標(biāo)簽 獲取img標(biāo)簽的src屬性 根據(jù)屬性值篩選出后綴符合圖片格式的鏈接
# 找到所有的img標(biāo)簽
imgs = soup.find_all("img")
# 設(shè)置圖片的常用格式
allow_image_file = ["jpg", "png", "jpeg", "gif"]
# 遍歷a標(biāo)簽找到href屬性
for link in imgs:
src = link.get("src")
img_suffix = src.split(".")[-1].split("?")[0] # 文件后綴名
img_name = src.split("/")[-1].split("?")[0] # 圖片名稱
# print(f"后綴:{img_suffix}")
# print(f"圖片名稱:{img_name}")
# 8.把圖片名稱取出來作為要下載的文件名
if img_suffix in allow_image_file:
# print(f"url:{src}")
# print(f"file_path:{mdir_file_name}/{img_name}")
download_image(src, f"{mdir_file_name}/{img_name}")
else:
print("爬取失敶馀取恐仑!")
# 調(diào)試代碼
if __name__ == "__main__":
main()
二、下載的圖片目錄文件截圖
image.png
三为鳄、注意事項
- 在爬取其他網(wǎng)頁的時候遇到網(wǎng)頁展示的圖片并不是真實的圖片源地址裳仆,需要自己手動拼接成源地址,此處需要具備一些前端知識孤钦,能分辨出圖片的地址【圖片鏈接打開后是在一個黑窗口中打開的基本是圖片的源地址歧斟,可以以此來判斷】
- 舉個例子:
-源地址:https://i.imgur.com/UWmsjWi_d.webp?maxwidth=760&fidelity=grand
-網(wǎng)頁默認(rèn)展示:https://i.imgur.com/UWmsjWi.jpg - 請求圖片資源如果失敗的情況下纯丸,可以嘗試在requests.get()方法中加上關(guān)鍵字參數(shù)headers={"User-Agent": "xxx"} 模擬人的行為