基于Selenium的Python爬虫抓取动态App图片

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
Elasticsearch Serverless检索通用型,资源抵扣包 100CU*H
简介: 基于Selenium的Python爬虫抓取动态App图片

QQ图片20250520154238.jpg

1.引言
在当今数字化时代,互联网上的数据资源丰富多样,其中动态网页和应用程序(App)中的图片数据尤为珍贵。这些图片可能用于数据分析、机器学习、内容推荐等多种场景。然而,由于许多 App 的图片加载是动态的,传统的爬虫方法往往难以直接获取。本文将介绍如何利用基于 Selenium 的 Python 爬虫技术来抓取动态 App 图片,详细阐述技术原理、实现步骤以及代码实现过程。

  1. 技术选型与工具准备
    2.1 为什么选择Selenium?
    ● 动态内容加载:许多App采用JavaScript动态加载数据,Selenium可以等待并获取完整渲染后的页面。
    ● 模拟用户操作:可以模拟点击、滚动、登录等行为,绕过部分反爬机制。
    ● 跨平台兼容:支持Chrome、Firefox、Edge等主流浏览器。
    2.2 所需工具
    ● Python 3.x(推荐3.8+)
    ● Selenium(pip install selenium)
    ● 浏览器驱动(如ChromeDriver)
    ● 图片处理库(Pillow,可选)
    ● 存储方案(本地文件、数据库等)
  2. 爬取动态App图片的完整流程
    3.1 目标分析
    假设我们要爬取某个图片社交App(如Instagram、Pinterest等)的公开图片,其特点包括:
    ● 动态加载(滚动时加载新图片)
    ● 图片URL可能隐藏在JavaScript渲染的DOM中
    ● 可能需要模拟登录或处理反爬机制
    3.2 代码实现
    (1)初始化Selenium WebDriver
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    import os

设置ChromeDriver路径(根据实际情况修改)

driver_path = "chromedriver.exe" # 或指定绝对路径
service = Service(driver_path)
options = webdriver.ChromeOptions()

可选项:无头模式(不显示浏览器界面)

options.add_argument("--headless")

初始化浏览器

driver = webdriver.Chrome(service=service, options=options)
(2)访问目标页面并模拟滚动
dfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

设置代理信息

proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

配置代理

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = f"{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
proxy.ssl_proxy = f"{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"

初始化 WebDriver,使用代理

options = webdriver.ChromeOptions()
options.proxy = proxy
driver = webdriver.Chrome(options=options)

def scroll_to_bottom(driver, max_scrolls=10, delay=2):
"""模拟滚动加载更多内容"""
last_height = driver.execute_script("return document.body.scrollHeight")
scroll_count = 0

while scroll_count < max_scrolls:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(delay)  # 等待新内容加载
    new_height = driver.execute_script("return document.body.scrollHeight")

    if new_height == last_height:
        break  # 已到底部
    last_height = new_height
    scroll_count += 1

示例:访问 Pinterest(需替换为目标 App 的 URL)

url = "https://www.pinterest.com/search/pins/?q=cats"

try:
driver.get(url)

# 等待页面加载
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "img"))
)

# 模拟滚动加载更多图片
scroll_to_bottom(driver, max_scrolls=5)

except Exception as e:
print(f"加载网页时遇到问题:{e}")
print("请检查网页链接的合法性,确保网络连接正常。如果问题仍然存在,请稍后重试。")

finally:
driver.quit()
(3)提取图片URL并下载
import requests
from PIL import Image
from io import BytesIO

def download_image(url, save_dir="images"):
"""下载图片并保存到本地"""
if not os.path.exists(save_dir):
os.makedirs(save_dir)

try:
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        img = Image.open(BytesIO(response.content))
        img_name = url.split("/")[-1].split("?")[0]  # 提取文件名
        img_path = os.path.join(save_dir, img_name)
        img.save(img_path)
        print(f"下载成功: {img_path}")
except Exception as e:
    print(f"下载失败: {url}, 错误: {e}")

获取所有图片元素

images = driver.find_elements(By.TAG_NAME, "img")

提取src并下载

for img in images:
img_url = img.get_attribute("src")
if img_url and "http" in img_url: # 过滤无效URL
download_image(img_url)
4、注意事项
反爬虫机制
许多网站会设置反爬虫机制,如限制访问频率、检测用户代理等。在使用 Selenium 爬虫时,需要注意以下几点:

  1. 设置合理的等待时间:在模拟用户行为时,适当增加等待时间,避免触发频率限制。
  2. 使用代理 IP:通过代理 IP 模拟真实用户访问,降低被封禁的风险。
  3. 设置随机用户代理:通过设置随机的用户代理(User-Agent),模拟不同的浏览器访问。
    5、总结
    本文详细介绍了基于 Selenium 的 Python 爬虫技术抓取动态 App 图片的方法。通过模拟用户行为、提取图片 URL 和下载图片,我们成功实现了动态图片的抓取。Selenium 的强大功能使其能够应对复杂的动态网页环境,为数据采集提供了有力支持。然而,在实际应用中,我们还需要注意反爬虫机制和法律合规性,确保爬虫技术的合法、合理使用。
相关文章
|
18天前
|
数据采集 存储 前端开发
Python爬虫自动化:批量抓取网页中的A链接
Python爬虫自动化:批量抓取网页中的A链接
|
1月前
|
数据采集 Web App开发 前端开发
Python+Selenium爬虫:豆瓣登录反反爬策略解析
Python+Selenium爬虫:豆瓣登录反反爬策略解析
|
1月前
|
JSON API 数据格式
手把手教你抓取京东商品评论:API 接口解析与 Python 实战
京东商品评论蕴含用户对产品质量、体验和服务的真实反馈,分析这些数据有助于企业优化产品和满足用户需求。由于京东未提供官方API,需通过逆向工程获取评论数据。其主要接口为“商品评论列表接口”,支持按商品ID、评分、排序方式等参数获取评论,返回JSON格式数据,包含评论列表、摘要(如好评率)及热门标签等信息。
|
2月前
|
数据采集 JSON API
Python 实战:用 API 接口批量抓取小红书笔记评论,解锁数据采集新姿势
小红书作为社交电商的重要平台,其笔记评论蕴含丰富市场洞察与用户反馈。本文介绍的小红书笔记评论API,可获取指定笔记的评论详情(如内容、点赞数等),支持分页与身份认证。开发者可通过HTTP请求提取数据,以JSON格式返回。附Python调用示例代码,帮助快速上手分析用户互动数据,优化品牌策略与用户体验。
|
7月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
341 6
|
7月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
349 4
|
10月前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
367 6
|
10月前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
数据采集 JSON 前端开发
Python爬虫进阶:使用Scrapy库进行数据提取和处理
在我们的初级教程中,我们介绍了如何使用Scrapy创建和运行一个简单的爬虫。在这篇文章中,我们将深入了解Scrapy的强大功能,学习如何使用Scrapy提取和处理数据。
|
数据采集 存储 中间件
Python高效爬虫——scrapy介绍与使用
Scrapy是一个快速且高效的网页抓取框架,用于抓取网站并从中提取结构化数据。它可用于多种用途,从数据挖掘到监控和自动化测试。 相比于自己通过requests等模块开发爬虫,scrapy能极大的提高开发效率,包括且不限于以下原因: 1. 它是一个异步框架,并且能通过配置调节并发量,还可以针对域名或ip进行精准控制 2. 内置了xpath等提取器,方便提取结构化数据 3. 有爬虫中间件和下载中间件,可以轻松地添加、修改或删除请求和响应的处理逻辑,从而增强了框架的可扩展性 4. 通过管道方式存储数据,更加方便快捷的开发各种数据储存方式

推荐镜像

更多