FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息

简介: 本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。

爬虫代理

引言

在互联网数据采集中,图片数据往往占据了重要位置。Pixabay作为一个免版权图片网站,拥有海量优质图片。本文将展示如何利用FastAPI搭建一个RESTful接口,通过Selenium模拟浏览器行为访问Pixabay,并使用代理IP、User-Agent和Cookie配置提高爬虫稳定性,进而采集页面中图片及其相关描述信息。

环境准备

本文示例依赖以下第三方库:

  • FastAPI:用于搭建API接口;
  • Uvicorn:作为ASGI服务器运行FastAPI应用;
  • Selenium:用于模拟浏览器操作,实现数据抓取;
  • ChromeDriver:与Chrome浏览器版本匹配的驱动程序。

安装命令示例:

pip install fastapi uvicorn selenium

代理IP、User-Agent与Cookie配置说明

  1. 代理IP技术
    使用代理IP可以有效防止目标网站对单一IP的封禁。本文以亿牛云爬虫代理为例,配置了代理的域名、端口、用户名和密码,通过ChromeOptions传递给Selenium。
  2. User-Agent设置
    为了模拟真实用户访问,在浏览器启动时设置User-Agent,降低被反爬的风险。
  3. Cookie设置
    Cookie可用于维持会话状态或绕过部分反爬策略。在访问Pixabay后,添加Cookie可以确保后续操作更贴近真实浏览器行为。

代码实现

以下代码示例展示了如何整合FastAPI和Selenium,实现对Pixabay页面的访问及图片数据采集。代码中包含详细的中文注释,便于理解各步骤的作用。

# -*- coding: utf-8 -*-
"""
FastAPI与Selenium结合示例:
通过FastAPI提供API接口,使用Selenium进行网页抓取。
代码中配置了代理IP(参考亿牛云爬虫代理www.16yun.cn)、User-Agent和Cookie。
此示例访问 https://pixabay.com ,采集页面中的图片及其相关信息。
"""

from fastapi import FastAPI
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

app = FastAPI()

def create_driver():
    # 初始化Chrome选项
    chrome_options = Options()

    # 设置User-Agent,模拟真实浏览器请求
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " \
                 "(KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
    chrome_options.add_argument(f"user-agent={user_agent}")

    # 配置代理IP参数(参考亿牛云爬虫代理)
    proxy_host = "proxy.16yun.cn"      # 代理域名
    proxy_port = "8000"                    # 代理端口
    proxy_user = "your_username"           # 代理用户名
    proxy_pass = "your_password"           # 代理密码
    # 拼接代理字符串,格式为:username:password@host:port
    proxy = f"{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
    chrome_options.add_argument(f"--proxy-server=http://{proxy}")

    # 可选:如果需要无头模式(不打开浏览器窗口),取消下行注释
    # chrome_options.add_argument("--headless")

    # 初始化Chrome WebDriver
    driver = webdriver.Chrome(options=chrome_options)

    # 预先访问目标网站,设置Cookie示例(Cookie需与目标域名匹配)
    driver.get("https://pixabay.com")
    driver.add_cookie({
   
        "name": "example_cookie",    # Cookie名称
        "value": "cookie_value",     # Cookie值
        "domain": "pixabay.com"      # Cookie对应的域名
    })

    return driver

@app.get("/crawl")
def crawl():
    """
    接口说明:
    该接口使用Selenium访问 https://pixabay.com 页面,
    采集页面中所有图片的URL及其相关描述信息(通过alt属性提供),
    并以JSON格式返回采集结果。
    """
    try:
        # 创建Selenium WebDriver实例
        driver = create_driver()
        # 访问目标URL:Pixabay首页
        driver.get("https://pixabay.com")
        # 等待页面加载(根据实际情况可调整等待时间)
        time.sleep(5)

        # 查找页面中所有的img标签元素
        img_elements = driver.find_elements(By.TAG_NAME, "img")

        # 存储图片信息的列表
        images_info = []

        # 遍历所有图片元素,提取图片URL和描述信息(alt属性)
        for img in img_elements:
            src = img.get_attribute("src")
            alt = img.get_attribute("alt")
            # 如果图片URL不存在则跳过
            if not src:
                continue
            images_info.append({
   
                "src": src,
                "alt": alt
            })
    except Exception as e:
        # 捕获异常并返回错误信息
        return {
   "error": str(e)}
    finally:
        # 关闭浏览器,释放资源
        driver.quit()

    return {
   "total_images": len(images_info), "images": images_info}

# 启动FastAPI服务(在命令行中运行: uvicorn main:app --host 0.0.0.0 --port 8000)
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

代码说明

  1. 代理配置
    create_driver函数中,通过chrome_options.add_argument("--proxy-server=http://{proxy}")设置了代理IP,其中代理信息参考亿牛云爬虫代理的参数。
  2. User-Agent设置
    利用chrome_options.add_argument(f"user-agent={user_agent}")模拟真实浏览器请求,帮助绕过部分反爬机制。
  3. Cookie设置
    通过在访问Pixabay后添加Cookie(示例中为example_cookie),使得后续请求更接近真实浏览器行为。
  4. 图片信息采集
    /crawl接口中,通过driver.find_elements(By.TAG_NAME, "img")获取页面中所有图片元素,并提取每个图片的src(图片链接)和alt(图片描述)属性,构造成列表返回。
  5. FastAPI接口
    FastAPI提供的/crawl接口无需传入参数,直接访问Pixabay首页采集图片数据,适用于展示或后续数据处理流程。

总结

本文通过实际案例演示了如何使用FastAPI和Selenium构建一个Web数据抓取服务。通过配置代理IP、User-Agent和Cookie,我们能够更稳健地访问目标网站(此处为Pixabay),并采集其中的图片及相关信息。在实际应用中,可根据需求扩展数据解析逻辑、增加错误重试机制或并行处理策略,进一步优化抓取效率与鲁棒性。

希望这篇文章及示例代码能为你构建高效爬虫服务提供有价值的参考。

相关文章
|
5月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
505 4
|
10月前
|
数据采集 Web App开发 JavaScript
基于Selenium的Python爬虫抓取动态App图片
基于Selenium的Python爬虫抓取动态App图片
751 68
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
683 5
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
428 31
Selenium IDE:Web自动化测试的得力助手
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
1026 17
Selenium:强大的 Web 自动化测试工具
|
前端开发 数据安全/隐私保护
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`<select>` 和 `<option>`)、文本域(`<textarea>`)、标签解释(`<label>`)、各类按钮(`<button>`)及表单重置功能、无语义布局标签(`<div>` 和 `<span>`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
356 6
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
|
Web App开发 Java 测试技术
使用selenium+chromedriver+xpath爬取动态加载信息(一)
使用selenium+chromedriver+xpath爬取动态加载信息(一)
390 1
|
安全 应用服务中间件 开发工具
Web安全-SVN信息泄露漏洞分析
Web安全-SVN信息泄露漏洞分析
1336 2
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
269 0
使用selenium+chromedriver+xpath爬取动态加载信息(二)
使用selenium+chromedriver+xpath爬取动态加载信息(二)
230 0