你爬过一个需要登录的网站吗?
我试过手动模拟登录、处理 Cookie、绕过验证码。折腾了两个小时,最后发现 AI 五分钟内就搞定了。
这就是今天要说的事——怎么用 AI 辅助写爬虫,让你从繁琐的反爬对抗中解放出来。
为什么你需要 AI 写爬虫?
传统爬虫开发有几个痛点:
- 反爬策略不断升级:验证码、IP 封禁、User-Agent 检测、行为分析
- 页面结构经常变化:CSS 选择器失效,XPath 要重写
- 技术栈复杂:requests 不够用得上 Selenium,Selenium 慢又要上 Playwright
- 调试成本高:一个报错排查半天
AI 能帮你解决"怎么写"的问题。你只需要说清楚需求,它给出可运行的代码。
基础篇:用 AI 写一个简单的爬虫
假设你要抓取某个新闻网站的标题和链接。
你告诉 AI:
“帮我用 Python 写一个爬虫,抓取 https://example-news.com 首页的 20 条新闻标题和链接,保存到 CSV 文件。”
AI 给出的代码大概长这样:
import requests
from bs4 import BeautifulSoup
import csv
url = "https://example-news.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
news_items = []
for article in soup.select("article.news-item")[:20]:
title = article.select_one("h2").get_text(strip=True)
link = article.select_one("a")["href"]
news_items.append({"标题": title, "链接": link})
with open("news_data.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["标题", "链接"])
writer.writeheader()
writer.writerows(news_items)
print(f"成功抓取 {len(news_items)} 条新闻")
你看,代码不长,但如果你自己来,可能要在浏览器里检查元素、找 CSS 选择器、处理编码问题,花的时间远不止这五分钟。
进阶篇:处理动态加载的内容
很多现代网站用 JavaScript 渲染页面。requests 拿不到数据,得用浏览器自动化。
你告诉 AI:
“上面的网站内容是用 JS 动态加载的,requests 抓不到。帮我改成用 Playwright 的方案。”
AI 会给出这样的代码:
from playwright.sync_api import sync_playwright
import csv
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example-news.com")
# 等待内容加载完成
page.wait_for_selector("article.news-item", timeout=10000)
articles = page.query_selector_all("article.news-item")
news_items = []
for article in articles[:20]:
title = article.query_selector("h2").inner_text()
link = article.query_selector("a").get_attribute("href")
news_items.append({"标题": title, "链接": link})
browser.close()
# 保存数据
with open("news_data.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["标题", "链接"])
writer.writeheader()
writer.writerows(news_items)
print(f"成功抓取 {len(news_items)} 条新闻")
安装也很简单:pip install playwright && playwright install。
实战篇:应对反爬策略
这才是真正头疼的部分。让我给你演示几个常见场景。
场景一:IP 被封了
你问 AI:
“我的 IP 被网站封了,怎么加代理 IP 轮换?”
AI 给的方案:
import random
import requests
proxy_list = [
{"http": "http://proxy1:8080", "https": "http://proxy1:8080"},
{"http": "http://proxy2:8080", "https": "http://proxy2:8080"},
]
def fetch_with_proxy(url):
proxy = random.choice(proxy_list)
response = requests.get(
url,
headers={"User-Agent": random_ua()},
proxies=proxy,
timeout=10
)
return response
def random_ua():
uas = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
"Mozilla/5.0 (X11; Linux x86_64) ...",
]
return random.choice(uas)
场景二:遇到验证码
你问 AI:
“网站有图形验证码,怎么处理?”
AI 的建议(三种方案):
- 打码平台:接入第三方验证码识别服务(如打码兔、超级鹰),适合简单的图形验证码
- OCR 识别:用 pytesseract + OpenCV 预处理图片后识别
- 无头浏览器绕过:有些验证码是 JS 生成的,Playwright 可以直接渲染页面拿到真实数据
对于复杂的验证码,AI 通常会建议你考虑是否真的需要爬——有时候网站提供了 API,直接调接口更省事。
场景三:需要登录才能访问
你问 AI:
“这个网站需要先登录才能看数据,怎么模拟登录?”
AI 会给出一套完整的登录流程:
import requests
from bs4 import BeautifulSoup
session = requests.Session()
# 1. 先访问登录页获取 CSRF token
login_page = session.get("https://site.com/login")
soup = BeautifulSoup(login_page.text, "html.parser")
csrf_token = soup.select_one('input[name="csrf_token"]')["value"]
# 2. 提交登录表单
login_data = {
"username": "your_username",
"password": "your_password",
"csrf_token": csrf_token
}
session.post("https://site.com/login", data=login_data)
# 3. 现在可以访问受保护的数据了
data_page = session.get("https://site.com/data")
print(data_page.text)
Session 对象会自动管理 Cookie,所以登录后后续请求都带着登录状态。
让 AI 帮你做增量爬取
每次全量爬取既浪费资源又容易被封。更好的做法是做增量更新。
import json
import os
from datetime import datetime
DATA_FILE = "cached_news.json"
# 加载已有数据
if os.path.exists(DATA_FILE):
with open(DATA_FILE, "r") as f:
cached = json.load(f)
else:
cached = {}
# 爬取新数据
new_articles = scrape_articles()
# 只保留新增的
for item in new_articles:
key = item["link"]
if key not in cached:
cached[key] = item
print(f"新增: {item['标题']}")
# 保存
with open(DATA_FILE, "w") as f:
json.dump(cached, f, ensure_ascii=False, indent=2)
print(f"缓存中共 {len(cached)} 条数据")
配合定时任务,每天自动更新一次。
AI 写爬虫的 5 个技巧
1. 分步让 AI 写代码
不要一次性让它写几百行。先让它写基础框架,再逐步添加功能。每一步都测试通过后再继续。
2. 把错误信息直接贴给 AI
爬虫报错是最常见的。把完整的 traceback 贴给 AI,通常它能立刻定位问题。
3. 让 AI 解释反爬机制
遇到不懂的反爬策略,问 AI"这个网站的反爬是怎么工作的"。它会告诉你检测了什么、怎么绕过。
4. 用 AI 生成测试用例
写完爬虫后,让 AI 生成测试用例验证逻辑是否正确。比如"帮我写一段代码验证抓取到的数据格式是否正确"。
5. 建立爬虫模板库
把常用的模式存下来:基础爬取、动态加载、带登录、代理轮换。下次换个网站,改改 URL 和选择器就能用。
法律与伦理提醒
爬取数据要注意几个原则:
- 遵守 robots.txt:这是基本礼仪
- 控制频率:别把人家服务器搞挂了
- 不爬个人隐私数据:这是红线
- 尊重版权:数据可以用来分析,但不能原样搬运发布
下一步
打开你的 AI 编辑器,找一个你想抓取的网站,试试让 AI 帮你写第一行爬虫代码。
你会发现,以前觉得很难的事情,其实五句话就能搞定。
你最想爬哪个网站的数据?告诉我,说不定我能帮你出主意。