首页 > 其他分享 >通过selenium框架爬取图片

通过selenium框架爬取图片

时间:2024-04-07 11:44:31浏览次数:17  
标签:webdriver 框架 selenium image driver 爬取 link import

通过selenium框架爬取图片

环境搭建

搭建python环境就不在此展开了, 首先安装selenium框架:

pip install selenium

下载浏览器驱动, 此处仅仅以Chrome浏览器为例子, 驱动版本必须与当前系统安装的Chrome对应

chromedriver下载,如果找不到对应版本, 是因为版本太新, 需要到此链接找到对应版本。

版本对应关系在链接中存在说明:
chromedriver

基本过程

首先将下载的chromedriver放置到环境变量:

current_script_path = os.path.abspath(os.path.dirname(__file__))
original_path = os.environ.get("PATH")
os.environ["PATH"] = original_path +";" + os.path.join(current_script_path,"chromedriver-win64","chromedriver.exe")

接下来启动浏览器驱动:

from selenium import webdriver

driver = webdriver.Chrome() 

# ....

driver.get(search_link)

查找指定元素

如果要找到指定元素, 可通过xpath:

from selenium.webdriver.common.by import By
first_link = driver.find_element(By.XPATH, '//ul[@class="dgControl_list "][1]//li[1]//a[1]')

点击指定元素

如果要点击指定元素:

first_link = driver.find_element(By.XPATH, '//ul[@class="dgControl_list "][1]//li[1]//a[1]')
first_link.click()

等待元素出现

如果要等待某元素出现:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)

image = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@id="mainImageWindow"]//img')))

获取元素属性

image = driver.find_element(By.XPATH, '//div[@id="mainImageWindow"]//img')
src = image.get_attribute("src")

关闭驱动

driver.close()

完整示例

该示例展示了如何从bing爬取指定关键字的图片:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def get_image_url_from_keyword(keyword, num_of_image):
    search_link = f"https://cn.bing.com/images/search?q={keyword}"
    driver = webdriver.Chrome() 
    wait = WebDriverWait(driver, 10)
    current_image_amount = 0
    urls = []
    try:
        driver.get(search_link)
        first_link = driver.find_element(By.XPATH, '//ul[@class="dgControl_list "][1]//li[1]//a[1]')
        # root = etree.HTML(driver.page_source)
        # first_link = root.xpath('//ul[@class="dgControl_list "][1]//li[1]//a[1]')
        first_link.click()
        while True:
            driver.refresh()
            image = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@id="mainImageWindow"]//img')))
            src = image.get_attribute("src")
            urls.append(src)
            current_image_amount+=1
            if current_image_amount >= num_of_image:
                break
            next = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@id="mainImageContainer"]/div[@id="navr"]')))
            next.click()
            driver.implicitly_wait(0.5)
            sys.stdout.write('\rprogress: {}/{}'.format(current_image_amount, num_of_image))
            sys.stdout.flush()
    except Exception as e:
        print(e)
   
    driver.close()
    return set(urls)


if __name__ == "__main__":
    
    key_words = ["美女", "帅哥"]
    for key in key_words:
        # 最多爬取500张截止
        urls = list(get_image_url_from_keyword(key, 500))
     

标签:webdriver,框架,selenium,image,driver,爬取,link,import
From: https://www.cnblogs.com/quenwaz/p/18118754

相关文章

  • RK3568平台 Uart驱动框架
    一.TTY子系统在Linuxkernel中,tty驱动不像于spi,iic等那么架构简单,它是一个庞大的系统,它的框架大体如下图一。我们作为普通的驱动开发移植人员,不会从零写tty驱动,一般都是厂家根据现有的tty驱动和自家芯片修改,拿到板子按照厂家的配置,串口应该使能直接使用的。但是开发的过程中也......
  • Django框架之ORM操作
    一、选择数据库1、默认数据库Django默认的数据库是sqlite3数据库DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':BASE_DIR/'db.sqlite3',}}2、指定数据库修改连接到MySQL数据库DATABASES......
  • Django框架之请求生命周期流程图
    一、引言WSGI、wsgiref、uwsgi三者是什么关系?WSGI是协议,小写的wsgiref和uwsgi是实现该协议的功能模块缓存数据库提前已经将你想要的数据准备好了,需要的时候直接拿就可以,提高了效率和响应时间。eg:当你在修改你的数据的时候,你会发现数据并不是立刻修改完成的,而是需要经......
  • Django框架之路由层
    一、路由匹配1、什么是路由在计算机领域中,路由(Routing)通常指的是确定数据包在网络中传输的路径的过程。当数据包从源主机发送到目标主机时,路由是决定数据包应该沿着哪条路径传输的方法。路由器是负责执行这种路由功能的设备。在Web开发中,路由通常指的是将特定的URL请求映射到相......
  • 接口自动化框架设计
    框架通用性:哪里都可以使用可扩展性:方便新增和修改功能可维护性:是否便于修改,适当封装但不能过度、分层设计(同一类型放一块)分层设计框架思路:1、写测试用例数据:test_data,存放excel2、测试用例文件:test_cases,写测试流程、业务流程、接口要干什么3、封装的工具类:tools,类似日志收......
  • 基于java中的springboot框架实现服装销售平台系统【附项目源码+论文说明】
    基于SpringBoot实现服装销售平台系统设计演示摘要随着信息互联网购物的飞速发展,一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了“衣依”服装销售平台的开发全过程。通过分析企业对于“衣依”服装销售平台的需求,创建了一个计算机管理“衣依”服装销售平......
  • 从像素游戏到 3A 大作的游戏引擎/框架
    Bevy——Rust构建的游戏引擎Bevy是一款由Rust语言构建且简单明了的数据驱动的游戏引擎,并将永远保持开源且免费。Mach——Zig游戏引擎和图形工具包Mach是一个Zig游戏引擎和图形工具包,用于构建高性能、真正跨平台、健壮且模块化的游戏,可视化和桌面/移动图形用......
  • scrapy框架之CrawlSpider全站爬取
    一、什么是全站爬取全站爬取(CrawltheEntireSite)是指通过网络爬虫程序遍历并获取一个网站上的所有页面或资源的过程。这种爬取方式旨在获取网站的全部内容,包括文本、图片、视频、链接等,以建立网站的完整内容索引或进行数据分析。二、全栈爬取介绍1、全站数据爬取的方式(1)通过......
  • scrapy框架之中间件
    一、中间件介绍中间件是Scrapy里面的一个核心概念。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。“中间件”这个中文名字和前面章节讲到的“中间人”只有一字之差。它们做的事情确实也非常相似。中间件和中间人都......
  • 如何爬取bcz的词汇
    如何爬取BCZ的四级/六级词汇声明:以下内容仅供学习参考,切勿滥用,滥用与本作者无关!一,安装Charles抓包工具步骤:打开Charles查看主机地址配置手机端代理(主机地址:端口)安装证书信任抓取测试抓取数据包解析数据包查看csv数据关于下载安装Charles,安装证书,配置......