程序介绍
我们有时由于工作原因,需要在网上下载大量的图片,下载图片一般是在百度里面下载,先在搜索文本框里面输入图片的关键字,然后点击百度一下,网站会列出大量相关的图片,如果一张一张的下载,非常耗时,现在用Python爬虫批量下载图片。
实现方法
本脚本主要是利用selenium库模拟人工操作,并且通过BeautifulSoup库解析Javascript动态加载的图片列表,再对获取的图片地址进行下载。
程序代码
from selenium import webdriverfrom bs4 import BeautifulSoupimport urllib.requestimport osimport time# 设置搜索关键字和保存路径keyword = "风景"save_path = f'D:/图片/{keyword}/'os.path.exists(save_path) or os.makedirs(save_path)#设置获取图片的数量limit = 100num = 0# 设置浏览器optiOns= webdriver.ChromeOptions()options.add_argument('headless')browser = webdriver.Chrome(optiOns=options)# 打开百度图片搜索页面url = '***/'browser.get(url)# 根据关键字搜索图片search_box = browser.find_element_by_css_selector('#kw')search_box.send_keys(keyword)submit_button = browser.find_element_by_css_selector( '#homeSearchForm > span.s_btn_wr > input.s_newBtn')submit_button.click()# 循环加载图片列表并下载图片scroll_pause_time = 1last_height = browser.execute_script("return document.body.scrollHeight")while True: if num > limit: break # 模拟滚动操作 browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(scroll_pause_time) new_height = browser.execute_script("return document.body.scrollHeight") if new_height == last_height: # 如果没有加载更多的图片,则退出循环 break last_height = new_height # 解析网页并下载图片 soup = BeautifulSoup(browser.page_source, 'html.parser') img_list = soup.select('img.main_img') for img in img_list: src = img['src'] if src.startswith('data'): # 跳过base64编码的图片 continue num = num +1 if num>limit: break filename = os.path.join(save_path, keyword+str(num)+'.jpg') try: urllib.request.urlretrieve(src, filename) print("成功下载: " + filename) except: print("下载失败: " + filename)# 关闭浏览器browser.quit()
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com