爬虫怎么写prompt
以下基于deepseek r1 总结:
以下是为大模型设计的结构化Prompt模板,用于生成专业级网络爬虫Python脚本。此Prompt包含技术约束、反检测策略和数据处理要求,可根据具体需求调整参数:
爬虫脚本生成Prompt模板1
请按照以下要求生成一个Python网络爬虫脚本:
1. 目标网站信息
- 网站URL:[在此填写具体网址,如https://example.com/products\]
- 目标数据:[明确描述需要爬取的数据,如商品名称/价格/评论等]
- 页面类型:[静态HTML/动态渲染/API接口/分页列表/详情页等]
2. 技术要求
python
# 必选技术栈
from selenium.webdriver import ChromeOptions
from bs4 import BeautifulSoup
import pandas as pd
import requests
3. 反检测要求
- 实现随机User-Agent轮换
- 设置合理请求间隔(2-5秒)
- 处理Cloudflare等反爬机制
- 使用IP代理池(如需)
3. 数据存储规范
输出格式:JSON/CSV/Excel(选择一种)
字段清洗要求:[如去除HTML标签/统一货币格式等]
去重机制:[基于URL/ID/时间戳等]
5. 异常处理
HTTP错误码处理(403/404/500等)
超时重试机制(最多3次)
反爬触发时的自动规避策略
6. 性能优化
并发请求数限制
缓存已爬取URL
增量爬取支持
7. 输出示例
json
// 展示期望的数据结构样例
{
"product_id": "123",
"name": "智能手机",
"price": {"original": 5999, "discount": 5499},
"rating": 4.5
}
8. 特殊要求
是否需要登录/验证码处理
是否处理JavaScript渲染内容
是否有地理限制
请生成完整可运行的Python代码,包含:
反爬绕过实现
数据解析逻辑
存储模块
日志记录系统
进度监控功能
爬虫脚本生成Prompt模板2(供参考)
-
技术栈明确化
要求使用:
- requests-html 处理动态渲染
- Scrapy-Redis 实现分布式爬取
- PyQuery 代替XPath解析
-
反爬策略强化
需要实现:
- 鼠标移动轨迹模拟
- 指纹浏览器配置
- TLS指纹混淆
-
数据合规性要求
遵守:
- robots.txt规则
- 欧盟GDPR数据保护
- 目标网站ToS条款
-
性能指标量化
控制:
- 请求频率 ≤ 10次/分钟
- 内存占用 < 500MB
- 断点续爬功能
示例输出(简版爬虫)
根据上述Prompt,大模型可能生成的代码框架:
python
import requests
from fake_useragent import UserAgent
import time
import json
from bs4 import BeautifulSoup
class ProfessionalCrawler:
def __init__(self):
self.session = requests.Session()
self.ua = UserAgent()
self.proxies = {"http": "socks5://127.0.0.1:1080"}
def get_random_headers(self):
return {
'User-Agent': self.ua.random,
'Accept-Language': 'en-US,en;q=0.9',
'Referer': 'https://www.google.com/'
}
def scrape(self, url):
try:
resp = self.session.get(
url,
headers=self.get_random_headers(),
proxies=self.proxies,
timeout=10
)
resp.raise_for_status()
# 使用BS4解析
soup = BeautifulSoup(resp.text, 'lxml')
data = {
'title': soup.find('h1').get_text().strip(),
'price': float(soup.select('.price')[0].text.replace('$', ''))
}
# 智能延迟
time.sleep(max(2, min(5, len(resp.text)/5000)))
return data
except Exception as e:
print(f"爬取失败: {str(e)}")
return None
if __name__ == '__main__':
crawler = ProfessionalCrawler()
result = crawler.scrape("https://example.com/product/123")
with open('output.json', 'w') as f:
json.dump(result, f, indent=2)
Prompt优化建议
-
增加约束条件
-
补充要求:
- 代码必须通过Pylint检测
- 支持Docker容器化部署
- 包含单元测试模块
-
指定架构模式
要求采用:
- 生产者-消费者模式处理队列
- 状态机管理爬取流程
- 支持Prometheus监控
-
法律声明
必须包含:
- 版权声明注释
- 使用条款确认
- 数据删除接口