前言
这个网站的4K图片还是挺好看的,不要一下大量爬取网站,不听,后果自负ヽ(`⌒´メ)ノ!!!
主要目标就是4K图片爬取,
pip install requests
pip install lxml
网站分析
- 目标网站:
https://pic.netbian.com
第一页 http://pic.netbian.com/4kdongman/
第二页 https://pic.netbian.com/4kdongman/index_2.html
第三页 https://pic.netbian.com/4kdongman/index_3.html
第一页与其他页url不同


- 问题解决
Q:代码遇到的问题是由于文件名中包含了不合法的字符
A:
def sanitize_filename(filename):
"""
Define disallowed characters
parms:
filename: str, the filename to be sanitized
returns:
str, the sanitized filename
"""
invalid_chars = '<>:"/\\|?*'
for char in invalid_chars:
filename = filename.replace(char, '_')
return filename
Q:requests.exceptions.SSLError,这是一个 SSL 连接错误,通常发生在尝试通过 HTTPS 协议连接到服务器时。如果连接中断或服务器的 SSL 证书无效,可能会出现这种错误。
A:
- 忽略 SSL 验证:你可以在 requests.get 中添加 verify=False 参数来忽略 SSL 证书验证。注意:这会使你的连接不再安全,应该谨慎使用。
- 重试机制:可以添加一个简单的重试机制,以便在遇到错误时重新尝试下载图片。
- 使用 requests.Session 和 requests.adapters.HTTPAdapter 创建一个带有重试机制的会话。
- 设置重试策略,最多重试 5 次,每次重试之间有 0.1 秒的延迟。
- 捕获请求异常:使用 try…except 块捕获 requests.exceptions.RequestException 异常,并在遇到错误时打印错误信息。
无异步版本
import requests
import os
from lxml import etree
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
def sanitize_filename(filename):
"""
Define disallowed characters
parms:
filename: str, the filename to be sanitized
returns:
str, the sanitized filename
"""
invalid_chars = '<>:"/\\|?*'
for char in invalid_chars:
filename = filename.replace(char, '_')
return filename
# 创建一个带有重试机制的会话
session = requests.Session()
retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
session.mount('https://', HTTPAdapter(max_retries=retries))
# (1)数据获取:请求网页
headers = {