基于CSDN第一篇文章,Python爬蟲之入門保姆級教程,學不會我去你家刷廁所。
這篇文章是2021年作者發表的,由于此教程,網站添加了反爬機制,有作者通過添加cookie信息來達到原來的效果,Python爬蟲添加Cookies以繞過反爬【僅供學習使用】
感謝兩位前輩的教程,根據此教程訪問時,會出現403的返回錯誤,證明訪問被拒絕了。
此時需要多按幾次ctrl+r刷新頁面,拿到最新的cookie,因為網站畢竟只能做一次真人驗證,拿到最新cookie復制到代碼的cookie信息即可,這個上面的作者有說,但替換過后還是會出現403,那是因為請求頭也要跟著換。
前三個屬性,通過f12的頁面找到對應屬性,進行替換即可正常下載。
整體代碼如下:
import requests
from bs4 import BeautifulSoup
import osprint('開始下載圖片...')
# 使用你獲取的 cookies
cookies = {'cf_clearance': 'AFmxyWsV7S.3peEwHAjLLVOdlXPNG9VXNiRM9TncRuk-1746581876-1.2.1.1-LUrY7b1hPgXsMiBd.CFTHQcrZVpueVxlBZ9R4KZnrQBPaZMfVk2fcGxA1of0Xlf7co8.SRN01FcM6rpnzTQIrlpaQS9pb8UEHUkYcgHKL9bCzcjxHty7hN86QQ7FN793puWejoeIoaCAzDTTcPe7_U.nyTXgg1p6beI9QoF8EiNAuO.1sppd2gj0LG2ExwLq0ECF3CDVWEzWsdDfExb2olVVotUdfEcLCd6mguxoNU_wcd3Y6.AGBE6fIN79OyMHvIaT4NPhi6XLT9XBrVSgVmEBgYFJnGgvWhotpujOYjsW8cdTCHIzLLQr7VPvQ0b49NVD01ohQs4tmlkKyQuhyykww08taQ7FrDnIHMbLM4LBFhjxvK5I4Dd3BJmr7KHa'# 更多 cookie...
}# 設置請求頭
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.489.400 QQBrowser/13.7.6351.400','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1'
}# 發送請求
base_url = 'https://pic.netbian.com/'
response = requests.get(base_url, headers=headers, cookies=cookies)# 檢查響應
if response.status_code == 200:# 解析網頁soup = BeautifulSoup(response.text, 'html.parser')images = soup.find_all('img') # 尋找所有 img 標簽os.makedirs('downloaded_images', exist_ok=True)for img in images:# 檢查 img 標簽中是否包含 src 和 alt 屬性image_path = img.get('src')title = img.get('alt')# 如果 img 標簽沒有 src,就跳過if image_path and title:full_url = base_url + image_pathtry:response = requests.get(full_url, headers=headers, cookies=cookies)response.raise_for_status() # 檢查請求是否成功# 獲取文件名并保存圖片file_name = os.path.join('downloaded_images', os.path.basename(image_path))with open(file_name, 'wb') as file:file.write(response.content)print(f'成功下載: {file_name} - 標題: {title}')except requests.exceptions.RequestException as e:print(f'下載失敗: {full_url} - 錯誤: {e}')else:print(f'跳過 img 標簽,src 或 alt 屬性缺失')
else:print("請求失敗,狀態碼:", response.status_code)