python 图片下载函数(类),怎么实现

tech2025-05-14  11

在我们写爬虫去爬取一些网络上的图片的时候,都会遇到统一的问题,就是得到了图片地址去爬取这个图片下来保存好,既然是统一的问题,那就要写点统一的东西来复用罗,今天来聊得就是如何下载图片,并生成PDF文件 这里就对应了我前面的博客《python爬虫爬取腾讯漫画,超快》,后续的图片下载基本都是用这个,也会继续改进 不多说先上代码

def process_item(item): if len(item['img_url']): item['img_name'] = name_replace(item['img_name']) dir_path = make_dir_path(item['img_name'], item['img_store']) cnt = str(len(item['img_url'])) headers = { 'Referer': item['web_url'], 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36' } for num, image_url in enumerate(item['img_url'], 1): # time.sleep(random.randint(3, 10)/10) image_file_name = '第' + str(num).rjust(3, '0') + '页-共' + cnt + '页.jpg' file_path = '%s/%s' % (dir_path, image_file_name) if os.path.exists(file_path): continue for index in range(5): try: response = requests.get(url=image_url, timeout=15, headers=headers, verify=False) if response.status_code == 200: with open(file_path, 'wb') as handle: for block in response.iter_content(1024): handle.write(block) check_img(file_path) break time.sleep(1+index) except: print('error_img:' + item['img_name'] + ' ' + image_file_name) else: print('\033[31m' + 'error_img:' + item['img_name'] + ' ' + image_file_name + '\033[0m' + ' ' + image_url) # 带颜色输出 if os.listdir(dir_path): if item['pic2pdf']: pic2pdf.process_pic2pdf(dir_path, item['img_store'], item['img_name']) return str(len(os.listdir(dir_path))) + '/' + cnt + 'P' else: os.rmdir(dir_path) return '0/' + cnt + 'P' return '0/0P'

先不介绍函数,先介绍函数的参数

公用图片爬取ITEM -- 20200421 'img_store' 存储地址 'img_name' 图片名称 'web_url' 图片章节地址 'pic2pdf' 是否同步生成pdf文件 'img_url' (数组)图片地址

第一步.先将存储地址组合搞定 第二步.requests请求图片数据,这里用到循环五次以防获取失败 第三步.存储图片并命名—这里还有一个校验图片的小功能 第四步.生产PDF文件 ============================================== 校验图片就比较简单就是用Image.open(file_path).verify()一下就可以了

def check_img(file_path): try: Image.open(file_path).verify() except: os.remove(file_path) print('\033[35m' + 'error_img:' + '\033[0m' + ' ' + file_path) # 带颜色输出

生成PDF也比较简单我使用的是import fitz

def process_pic2pdf(pic_path, pdf_path, name): print(pic_path, pdf_path, name) doc = fitz.open() for img_name in os.listdir(pic_path): img = pic_path + '/' + img_name imgdoc = fitz.open(img) # 打开图片 pdfbytes = imgdoc.convertToPDF() # 使用图片创建单页的 PDF imgpdf = fitz.open("pdf", pdfbytes) doc.insertPDF(imgpdf) # 将当前页插入文档 new_pdf_path = pdf_path + '/' + name + ".pdf" if not os.path.exists(pdf_path): os.makedirs(pdf_path) if os.path.exists(new_pdf_path): os.remove(new_pdf_path) doc.save(new_pdf_path) # 保存pdf文件 doc.close() return name

大致的东西就这么多,后续看下能不能写个比较好点的类,细节方面都是我在测试时出现问题上完善的,大家注意下就可以了 具体的代码看我前面的博客 python爬虫爬取腾讯漫画 下期和大家分享如何下载网上的美女图片 拜拜

最新回复(0)