使用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()

效果图

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

相关推荐
鸡哥爱技术1 小时前
Django入门笔记
笔记·python·django
猫耳君2 小时前
汽车网络安全 CyberSecurity ISO/SAE 21434 测试之一
python·安全·网络安全·汽车·iso/sae 21434·cybersecurity
q567315232 小时前
自动化拨号爬虫体系:虚拟机集群部署与增量管理
运维·爬虫·网络协议·自动化
勘察加熊人2 小时前
python将pdf转txt,并切割ai
数据库·python·pdf
IMER SIMPLE2 小时前
人工智能-python-深度学习-神经网络VGG(详解)
人工智能·python·深度学习
Dersun3 小时前
python学习进阶之异常和文件操作(三)
开发语言·python·学习·json
Juchecar3 小时前
通过“单词补全”演示 Transformer 原理(Python代码可运行)
人工智能·python
c8i3 小时前
关于python中的钩子方法和内置函数的举例
python
动能小子ohhh3 小时前
AI智能体(Agent)大模型入门【2】--基于llamaindx部署本地的聊天模型。
人工智能·python·aigc·ai编程
MediaTea3 小时前
Python 第三方库:SymPy(符号计算工具)
开发语言·python·数学建模