[记录]Python使用selenium+chromedriver批量下载需要登陆的网站的图片

[记录]Python使用selenium+chromedriver批量下载需要登陆的网站的图片

需求说明

在这里插入图片描述
以上为不相同的图片的地址,如果手动下载需要一个一个的打开网站,但是使用python既可以一键完成.

  1. 多个图片;
  2. 需要登陆验证,网站有防机器人措施,无法使用循环下载;
  3. 图片地址在csv文件中.

实现

读取csv文件

一、 导入csv模块

import csv

二、读取csv文件

import csv
import os
csv_file = csv.reader(open('D:\\数据.csv','r',encoding='utf-8'))
for info in csv_file:
	url_1 = info[4] # 4代表url所在csv文件中的列索引,从0开始

调用浏览器下载图片

这里以谷歌浏览器为例,如果使用其他浏览器请找度娘寻找相应的教程.
一、下载浏览器驱动

  1. 地址栏输入:chrome://settings/help,查找当前浏览器的版本;
    在这里插入图片描述
  2. 根据对应版本下载chromedriver驱动;

下载之后解压到谷歌浏览器的安装目录即可.
二、安装python的selenium模块

pip install selenium

三、调用浏览器输入密码后自动循环下载图片

修改之前的代码:

import csv
import requests
import os
from selenium import webdriver
import time

# 读取csv文件
csv_file = csv.reader(open('D:\\数据.csv','r',encoding='utf-8'))
# 调用刚刚下载的驱动
browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
# 遍历csv文件每行链接
i = 0 # 判断是第几次进入网站
for info in csv_file:
	url_1 = info[4] # 4代表url所在csv文件中的列索引,从0开始

	# 第一次进入需要输入用户名与密码验证
	browser.get(url_1) # 第一次进入
	if i == 0:        
		# 这里需要打开网站的登陆界面,按F12查看网站登陆表单的元素
        browser.find_element_by_id("UserName").send_keys("用户名")
        browser.find_element_by_id("Password").send_keys("密码")
        browser.find_element_by_id("LoginButton").click()     # 点击登陆按钮  
	# 防止网速有延时,导致抢一个还未访问到即开始访问下一个链接,设置休眠5s,
    time.sleep(5)        

运行代码,这样就可以看到一个新的浏览器打开然后自动下载所需要的图片了.

可直接下载的链接

import csv
import requests
import os

# 读取csv文件
csv_file = csv.reader(open('D:\\数据.csv','r',encoding='utf-8'))
root = 'D:\\下载图片\\' # 保存的路径

headers = {
       'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
       }

for info in csv_file:
	file_name = info[1] + '_' + info[2] + '.jpg' #命名文件
	path_1 = root + file_name # 文件名称
	try:
		# 判断目录是否存在
    	if not os.path.exists(root): 
            os.mkdir(root)
        # 如果存在
        if os.path.exists(path_1):            
            r1 = requests.get(url_1,headers = headers)
            r1.raise_for_status()
    #        #使用with语句可以不用自己手动关闭已经打开的文件流
            with open(path_1,"wb") as f1: #开始写文件,wb代表写二进制文件
                f1.write(r1.content)

            print(file_name)
        else:
            print("文件已存在")
    except Exception as e:
        print("下载失败:" + str(e))  
	

可能会遇到下载的图片无法打开的问题,这样你可以将图片的格式更改为txt文本格式打开看看,一般网站都有反机器人设置,导致一键下载的图片都无法打开.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值