SuperAPI AI 工具集

web-scraping-automation

数据与分析

查看项目

更新于 10-15 08:07

技能介绍

用途

网站爬取与 API 自动化技能专门用于自动化网站数据爬取和 API 接口调用。当用户需要抓取网页内容、调用 API、解析数据或创建爬虫脚本时使用。

主要能力

  • 分析和爬取网站结构
  • 调用和测试 REST/GraphQL API
  • 创建自动化爬虫脚本
  • 数据解析和清洗
  • 处理反爬虫机制
  • 定时任务和数据存储

使用方式

技能按以下工作流程推进:

  1. 目标分析:检查网站结构和数据位置,分析 API 接口和认证方式,评估反爬虫机制。
  2. 方案设计:选择合适的技术栈,设计数据提取策略,规划错误处理和重试机制。
  3. 脚本开发:编写爬虫代码,实现数据解析逻辑,添加日志和监控。
  4. 测试优化:验证数据准确性,优化性能和稳定性,处理边界情况。

技术栈

Python 爬虫:requests(HTTP 请求库)、BeautifulSoup4(HTML 解析)、Scrapy(专业爬虫框架)、Selenium(浏览器自动化)、Playwright(现代浏览器自动化)。

JavaScript 爬虫:axios(HTTP 客户端)、cheerio(服务端 jQuery)、puppeteer(Chrome 自动化)、node-fetch(Fetch API)。

资源清理原则(强制)

所有涉及浏览器的爬取任务完成后,必须自动关闭 Chrome/Selenium 进程。

Playwright 示例:

from playwright.sync_api import sync_playwright

def scrape_website():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        # ... 爬取逻辑 ...
        browser.close()

    # ⚠️ 强制清理残留进程
    import subprocess
    subprocess.run(['pkill', '-f', 'chrome'], capture_output=True)

Selenium 示例:

from selenium import webdriver

driver = webdriver.Chrome()
try:
    # ... 爬取逻辑 ...
    pass
finally:
    driver.quit()
    # ⚠️ 确保清理
    import subprocess
    subprocess.run(['pkill', '-f', 'chrome'], capture_output=True)

原因:避免内存泄漏和资源占用,防止 Gateway CPU 100% 过载。

常见场景示例

  1. 简单网页爬取
import requests
from bs4 import BeautifulSoup

def scrape_website(url):
    headers = {'User-Agent': 'Mozilla/5.0'}
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    # 提取数据
    data = []
    for item in soup.select('.product'):
        data.append({
            'title': item.select_one('.title').text,
            'price': item.select_one('.price').text
        })
    return data
  1. API 调用
import requests

def call_api(endpoint, params=None):
    headers = {
        'Authorization': 'Bearer YOUR_TOKEN',
        'Content-Type': 'application/json'
    }
    response = requests.get(endpoint, headers=headers, params=params)
    return response.json()
  1. 动态网页爬取
from selenium import webdriver
from selenium.webdriver.common.by import By

def scrape_dynamic_page(url):
    driver = webdriver.Chrome()
    driver.get(url)

    # 等待页面加载
    driver.implicitly_wait(10)

    # 提取数据
    elements = driver.find_elements(By.CLASS_NAME, 'item')
    data = [elem.text for elem in elements]

    driver.quit()
    return data

适用场景

  • "爬取这个网站的产品信息"
  • "帮我调用这个 API 并解析返回数据"
  • "创建一个脚本定时抓取新闻"
  • "分析这个网站的 API 接口文档"
  • "绕过这个网站的反爬虫限制"

反爬虫应对策略

  • 请求头伪装:模拟真实浏览器
  • 代理轮换:使用代理池
  • 验证码处理:OCR 或第三方服务
  • Cookie 管理:维护会话状态
  • 请求频率控制:避免触发限制
  • JavaScript 渲染:使用 Selenium/Playwright

数据存储方案

  • CSV/Excel:简单数据导出
  • JSON:结构化数据存储
  • 数据库:MySQL、PostgreSQL、MongoDB
  • 云存储:S3、OSS
  • 数据仓库:用于大规模数据分析

最佳实践

  • 遵守 robots.txt 规则
  • 设置合理的请求间隔
  • 使用 User-Agent 和请求头
  • 实现错误重试机制
  • 数据去重和验证
  • 使用代理池(如需要)
  • 保存原始数据和日志

限制

资料未提供该技能的具体收费方式、价格、平台支持范围及效果保证等信息。