使用Python3和Selenium打造百度图片爬虫

开篇

本文的目的在于实现一个用来爬取百度图片的爬虫程序,因该网站不需要登录,所以相对来说较为简单。下面的爬虫程序中我写了比较多的注释,以便于您的理解。

准备

请确保电脑上已经安装了与chrome浏览器版本匹配的chromeDriver,且电脑中已经安装了python3和pip库。在上面的要求均已达到的情况下,请按照下面的顺序下载包:

pip install selenium

pip install openpyxl

pip install pandas

代码实现

python 复制代码
import os
import base64
import requests
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化WebDriver的方法
def setup_driver(chrome_driver_path, chrome_executable_path):
    # 创建一个Options实例,用来配置Chrome浏览器的启动选项
    options = Options()
    # 启动浏览器时窗口最大化
    options.add_argument("--start-maximized")
    # 设置chrome浏览器的二进制位置
    options.binary_location = chrome_executable_path

    # 返回一个webdriver实例
    return webdriver.Chrome(service=Service(chrome_driver_path), options=options)

# 创建保存图片的目录
def create_save_directory(dir):
    if not os.path.exists(dir):
        os.makedirs(dir)

# 下载图片
def download_img(url, filename):
    if url.startswith('data:image'):
        encoded = url.split(',', 1)[1]
        data = base64.b64decode(encoded)
        with open(filename, 'wb') as file:
            file.write(data)
    else:
        response = requests.get(url)
        if response.status_code == 200:
            with open(filename, 'wb') as file:
                file.write(response.content)

def main():
    # 设置chromedriver路径
    chrome_driver_path = r'F:\applications\chrome\chromedriver\chromedriver.exe'
    # 设置chrome.exe的路径
    chrome_executable_path = r'F:\applications\chrome\chrome\chrome.exe'

    # 初始化WebDriver
    driver = setup_driver(chrome_driver_path, chrome_executable_path)

    try:
        # 打开百度图片
        driver.get("https://image.baidu.com/")

        # 输入关键字并搜索
        search_box = driver.find_element(By.NAME, 'word')
        search_box.send_keys("狸花猫")
        search_box.send_keys(Keys.RETURN)

        # 等待页面加载
        WebDriverWait(driver, 19).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'img.main_img')))

        # 创建保存图片的文件夹
        save_directory = r'F:\codes\spider\baiduImgs'
        create_save_directory(save_directory)

        # 爬取图片
        img_cnt = 0
        while img_cnt < 100:
            # 获取当前页面所有图片元素
            imgs = driver.find_elements(By.CSS_SELECTOR, 'img.main_img')
            for img in imgs:
                if img_cnt >= 100:
                    break
                try:
                    src_url = img.get_attribute('src')
                    if src_url:
                        filename = os.path.join(save_directory, f'{img_cnt + 1}.jpg')
                        download_img(src_url, filename)
                        img_cnt += 1
                        print(f'Downloaded {filename}')
                except Exception as e:
                    print(f'Error downloading image: {e}')

            # 下滑页面以加载更多图片
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(3)

    finally:
        # 关闭浏览器
        driver.quit()

if __name__ == "__main__":
    main()

效果图

上面的代码即为百度图片爬虫的基本实现思路,希望能对您起到抛砖引玉的作用。

相关推荐
哇咔咔哇咔24 分钟前
【科普】conda、virtualenv, venv分别是什么?它们之间有什么区别?
python·conda·virtualenv
CSXB991 小时前
三十四、Python基础语法(文件操作-上)
开发语言·python·功能测试·测试工具
亚图跨际2 小时前
MATLAB和Python及R潜变量模型和降维
python·matlab·r语言·生物学·潜变量模型
IT古董2 小时前
【机器学习】决定系数(R²:Coefficient of Determination)
人工智能·python·机器学习
德育处主任Pro2 小时前
『Django』APIView基于类的用法
后端·python·django
Star Patrick2 小时前
算法训练(leetcode)二刷第十九天 | *39. 组合总和、*40. 组合总和 II、*131. 分割回文串
python·算法·leetcode
武子康3 小时前
大数据-213 数据挖掘 机器学习理论 - KMeans Python 实现 距离计算函数 质心函数 聚类函数
大数据·人工智能·python·机器学习·数据挖掘·scikit-learn·kmeans
写点什么啦3 小时前
使用R语言survminer获取生存分析高风险和低风险的最佳截断值cut-off
开发语言·python·r语言·生存分析·x-tile
武子康3 小时前
大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels
大数据·人工智能·python·深度学习·算法·机器学习·数据挖掘
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-Okex K线数据
人工智能·python·机器学习·数据挖掘