前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >批量爬取百度图库中的图片

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

作者头像
阿黎逸阳
发布2024-03-25 11:27:50
1180
发布2024-03-25 11:27:50
举报

一、导入库

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

代码语言:javascript
复制
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

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

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

代码语言:javascript
复制
百度图片网中存了很多类型的图片,本文以百度图片网作为目标网站,汽车图片作为图片类型进行代码探索。
登录百度图片网并搜索汽车图片的代码如下:
代码语言:javascript
复制
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=&ic=&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)

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

三、获取单张图片的下载链接

接着通过xpath路径的方法获取第一张图片的下载链接,具体代码如下: 得到结果:

四、下载单张图片接着通过获取到的链接下载第一张图片,具体代码如下:

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

五、批量下载图片 最后写循环批量下载图片。 这里的关键是找到所有图片的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=&ic=&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”模块相关文章。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-23,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、导入库
  • 二、定义爬取的目标网站和图片类型
  • 三、获取单张图片的下载链接
  • 四、下载单张图片接着通过获取到的链接下载第一张图片,具体代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com