批量爬取百度图库中的图片

接到公众号小伙伴在学习群中的求助,想要实现静态网页批量爬取图片。

具体的实施步骤是:明确爬取的目标网站—明确爬取的图片类型—单张图片爬取—批量图片爬取—把图片存到文件夹中。

本文把实现方法分享给更多有需要的小伙伴。

本文目录

  1. 导入库

  2. 定义爬取的目标网站和图片类型

  3. 获取单张图片的下载链接

  4. 下载单张图片

  5. 批量下载图片

一、导入库

picture.image

首先导入需要用到的库,具体如下:

  
import time  
from captcha import *   
from selenium import webdriver  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support import wait  
from selenium.webdriver.common.keys import Keys  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.action_chains import ActionChains  
from selenium.webdriver.support import expected_conditions as EC  
from selenium.webdriver.support.ui import WebDriverWait  
from webdriver_manager.chrome import ChromeDriverManager  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.action_chains import ActionChains  
from selenium.webdriver.support import expected_conditions as EC

如有未安装库的小伙伴,自行百度安装一下。

二、定义 爬取的目标网站和图片类型

picture.image

百度图片网中存了很多类型的图片,本文以百度图片网作为目标网站,汽车图片作为图片类型进行代码探索。

登录百度图片网并搜索汽车图片的代码如下:

  
input_pic_name = '汽车图片'  
#输入查找图片类型  
browser = webdriver.Chrome(ChromeDriverManager().install())  
#安装chrom  
browser.maximize_window()  
#最大化窗口  
login_url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1710763846264_R&pv=⁣=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&dyTabStr=MCwzLDEsMiw2LDQsNSw3LDgsOQ%3D%3D&ie=utf-8&sid=&word=%E6%B1%BD%E8%BD%A6%E5%9B%BE%E7%89%87'  
#网址  
browser.get(login_url)  
#登录网址  
input_pic_type = browser.find_element_by_xpath('/html/body/div[1]/div[1]/div/div/div[1]/form/span[1]/input')  
#输入查询内容的路径  
input_pic_type.send_keys(Keys.CONTROL, 'a')  
input_pic_type.send_keys(input_pic_name, Keys.ENTER)

登录并搜索汽车图片后可看到如下页面:

picture.image


 
 **三、获取单张图片的下载链接** 
 
 
 ![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/81bcfdc20cc24375b974a563fb4d6488~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1775551327&x-signature=MOd7veik6xQtV06ACKDcdItPgJA%3D)
 接着通过xpath路径的方法获取第一张图片的下载链接,具体代码如下:  



   
 

  `url1_xpath = '//*[@id="imgid"]/div[1]/ul/li[1]/div/div[2]/a'` `new_herf = browser.find_element_by_xpath(url1_xpath).get_attribute('href')` `#获取第一个图片的网址链接` `print(new_herf)`
 
   
 
 得到结果:  



    
 

  `https://image.baidu.com/search/detail?ct=503316480&z=&tn=baiduimagedetail&ipn=d&word=%E6%B1%BD%E8%BD%A6%E5%9B%BE%E7%89%87&step_word=&lid=7517761861221777008&ie=utf-8∈=&cl=2&lm=-1&st=-1&hd=&latest=&copyright=&cs=253140293,2264989215&os=699755588,24788654&simid=3505362091,357285301&pn=0&rn=1&di=7308398814245683201&ln=1974&fr=&fmq=1711183311493_R&fm=result⁣=&s=undefined&se=&sme=&tab=0&width=&height=&face=undefined&is=0,0&istype=2&ist=&jit=&bdtype=0&spn=0π=0&gsm=1e&objurl=https%3A%2F%2Fpic.rmb.bdstatic.com%2Fbjh%2Fevents%2Ff38b175c2cb72feedafb2ef1f29d42699799.png%40h_1280&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MCwzLDEsMiw2LDQsNSw3LDgsOQ%3D%3D`
   



  
 **四、下载单张图片** 
 
  
 ![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/81bcfdc20cc24375b974a563fb4d6488~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1775551327&x-signature=MOd7veik6xQtV06ACKDcdItPgJA%3D)
 接着通过获取到的链接下载第一张图片,具体代码如下:  



 
 

  `browser.get(new_herf)` `browser.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[2]/div/div[1]/span[7]').click()` `#下载图片`
 得到结果:

![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/6de7fe88434d439399ed076ef57721ad~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1775551327&x-signature=MiDoD8wtwXBccpP1syeWnx9kyUE%3D)

  



  
 **五、批量下载图片** 
 
  
 ![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/81bcfdc20cc24375b974a563fb4d6488~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1775551327&x-signature=MOd7veik6xQtV06ACKDcdItPgJA%3D)
 
 
 最后写循环批量下载图片。
 
 
 这里的关键是找到所有图片的xpath路径,并从路径中获取下载图片的链接,接着模拟点击下载即可。
 
 
 所以首先要找出所有xpath路径的规律,并用循环的方式获取到所有路径。
 
 
 先看下前几张图片的xpath路径:
 
  
 

  `//*[@id="imgid"]/div[1]/ul/li[1]/div/div[2]/a` `//*[@id="imgid"]/div[1]/ul/li[2]/div/div[2]/a` `//*[@id="imgid"]/div[1]/ul/li[3]/div[1]/div[2]/a` `//*[@id="imgid"]/div[1]/ul/li[4]/div/div[2]/a` `//*[@id="imgid"]/div[1]/ul/li[5]/div/div[2]/a` `//*[@id="imgid"]/div[1]/ul/li[6]/div[1]/div[2]/a`
 可以梳理出xpath的循环格式如下:


  
 

  `url_xpath = '//*[@id="imgid"]/div['+ str(j) + ']/ul/li[' + str(i) + ']/div/div[2]/a'` `or` `url_xpath = '//*[@id="imgid"]/div['+ str(j) + ']/ul/li[' + str(i) + ']/div[1]/div[2]/a'`
 
  
 然后把批量下载图片的代码封装到函数里,具体如下:
   

 
  
 

  `def get_pic(input_pic_name, num):` `input_pic_name = input_pic_name #输入想要获取的图片名称` `browser = webdriver.Chrome(ChromeDriverManager().install())` `browser.maximize_window()` `login_url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1710763846264_R&pv=⁣=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&dyTabStr=MCwzLDEsMiw2LDQsNSw3LDgsOQ%3D%3D&ie=utf-8&sid=&word=%E6%B1%BD%E8%BD%A6%E5%9B%BE%E7%89%87'` `browser.get(login_url)` `input_pic_type = browser.find_element_by_xpath('/html/body/div[1]/div[1]/div/div/div[1]/form/span[1]/input')` `input_pic_type.send_keys(Keys.CONTROL, 'a')` `input_pic_type.send_keys(input_pic_name, Keys.ENTER)` `all_herf = []` `for j in range(1, num+1):` `for i in range(1, num+1):`  `#获取对应图片下载地址` `try:`  `url_xpath = '//*[@id="imgid"]/div['+ str(j) + ']/ul/li[' + str(i) + ']/div/div[2]/a'` `new_herf = browser.find_element_by_xpath(url_xpath).get_attribute('href')` `all_herf.append(new_herf)`  `except:` `pass` `try:`  `url_xpath = '//*[@id="imgid"]/div['+ str(j) + ']/ul/li[' + str(i) + ']/div[1]/div[2]/a'` `new_herf = browser.find_element_by_xpath(url_xpath).get_attribute('href')` `all_herf.append(new_herf)`  `except:` `pass` `i = 1` `for herf in all_herf:` `browser.get(herf)` `time.sleep(5)` `#下载图片` `browser.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[2]/div/div[1]/span[7]').click()` `browser.implicitly_wait(10)` `#i += 1` `#if i>3:`  `#browser.close()`  `#browser.implicitly_wait(1)` `return len(all_herf)`
 最后调用函数批量下载图片,代码如下:


  
 

  `input_pic_name = '汽车图片' #输入想下载图片的名称` `num_pic = 20 #输入想下载图片数量`  `get_pic(input_pic_name, num_pic/2) #批量获取对应图片`
 至此,应用Python批量爬取百度图库网中的图片已讲解完毕,如想了解更多Python中的函数,可以翻看公众号中“学习Python”模块相关文章。  



    
 
 

【部分群限时免费进** 】** 分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供练习数据资料、招聘内推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如学习python。

往期回顾:

Python批量爬虫下载PDF文件代码实现

一文囊括Python中的函数,持续更新。。。

一文囊括Python中的有趣案例,持续更新。。。

【python爬虫】批量识别pdf中的英文,自动翻译成中文下

【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考

picture.image

picture.image

限时免费进群

19967879837

添加 微信号、手机号

0
0
0
0
评论
未登录
暂无评论