文件系统操作:使用os.path.exists判断文件夹是否存在,os.makedirs创建图片保存文件夹,处理文件存储的基础路径问题;通过os.path.basename提取图片 URL 中的文件名,并替换非法字符(/、\)避免文件保存失败。
Selenium 浏览器驱动使用:初始化 Chrome 浏览器实例,通过browser.get访问目标网页;利用browser.quit关闭浏览器,通过try-finally保证浏览器无论爬取成败都能正常关闭。
Selenium 显式等待机制:使用WebDriverWait结合EC.presence_of_element_located等待页面图片元素加载完成,设置超时时间适配国外网站加载慢的场景,避免提前解析空页面。
JavaScript 脚本执行:通过browser.execute_script执行滚动页面的 JS 代码(window.scrollTo),实现页面滚动加载更多图片,模拟用户浏览行为。
Requests 库网络请求:使用requests.get发起图片下载请求,设置timeout避免请求超时,通过stream=True流式下载图片并分块写入文件(iter_content),降低内存占用;配置User-Agent、Referer请求头伪装浏览器,规避图片链接 403 错误;通过raise_for_status检查请求状态码,捕获 4xx/5xx 请求错误。
异常处理:使用try-except捕获图片下载、页面解析过程中的异常,打印错误信息且不中断整体爬取流程;主程序通过try-finally保证浏览器资源释放。
BeautifulSoup 页面解析:利用BeautifulSoup解析浏览器渲染后的页面源码,通过 CSS 选择器(select/select_one)定位图片元素,优先提取data-src(懒加载高清链接),无则取src。
数据去重:使用集合(set)存储图片链接,避免滚动加载导致的重复图片下载,保证下载的图片唯一性。
反爬策略规避:设置time.sleep在图片下载、页面滚动后添加延时,降低请求频率;伪装请求头模拟真实浏览器行为,减少被网站反爬机制识别的概率。
函数封装与代码结构:将图片下载、首页爬取逻辑封装为独立函数,提升代码可读性和复用性;主程序仅调用核心爬取函数,无冗余分页逻辑,专注处理首页爬取。