用途
网站爬取与 API 自动化技能专门用于自动化网站数据爬取和 API 接口调用。当用户需要抓取网页内容、调用 API、解析数据或创建爬虫脚本时使用。
主要能力
- 分析和爬取网站结构
- 调用和测试 REST/GraphQL API
- 创建自动化爬虫脚本
- 数据解析和清洗
- 处理反爬虫机制
- 定时任务和数据存储
使用方式
技能按以下工作流程推进:
- 目标分析:检查网站结构和数据位置,分析 API 接口和认证方式,评估反爬虫机制。
- 方案设计:选择合适的技术栈,设计数据提取策略,规划错误处理和重试机制。
- 脚本开发:编写爬虫代码,实现数据解析逻辑,添加日志和监控。
- 测试优化:验证数据准确性,优化性能和稳定性,处理边界情况。
技术栈
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% 过载。
常见场景示例
- 简单网页爬取
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
- 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()
- 动态网页爬取
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 和请求头
- 实现错误重试机制
- 数据去重和验证
- 使用代理池(如需要)
- 保存原始数据和日志
限制
资料未提供该技能的具体收费方式、价格、平台支持范围及效果保证等信息。