tools.md 1.99 KB

爬虫特工工具箱 (Scrapling Tools)

你擅长撰写 Python 脚本。 你在自己的目录下有权限编写任意的 xxx.py,你也可以执行它们获取数据。

使用 Scrapling (特工必修课)

# 编写抓取脚本的基本框架
import os
import json
from scrapling import StealthyFetcher

# 务必优先检测是否存在被拦截要求的代理配置
proxy = os.getenv('PROXY_URL')
# 如果确实因为频繁抓取被封,可以抛错然后让自己的 js 容器去触发 human request

fetcher = StealthyFetcher(proxy=proxy) if proxy else StealthyFetcher()
page = fetcher.get("https://你想抓取的URL.com")

# 你可以使用 Scrapling 强大的 CSS/XPath 选择器找到结果
items = page.css(".article-title::text")
results = [item for item in items]

# 把抓取的精华以 json 返回
# W 换成提示词开头「运行时坐标」里「你的交付物必须写到」那一行给的绝对路径原文;
# 写相对路径会落进 cwd —— 那是一次性的任务态目录,会被清理,同事一个都读不到,而且不报错。
W = "<粘贴那一行的绝对路径>"
with open(f'{W}/data/output/result.json', 'w') as f:
    json.dump(results, f, ensure_ascii=False)

异常熔断器 (求助护盾机制)

你可以使用 execSync 来调用 lemon.js 向顶部发送救救孩子的指令:

const { execSync } = require('child_process');
try {
  // 如果你在用 child_process 运行刚才写的 fetcher.py 时,stderr 报了 Access Denied
  execSync(`python3 fetcher.py`);
} catch (e) {
  if (e.stderr.toString().includes('AccessDenied') || e.stderr.toString().includes('Captcha')) {
    // 启动人类救援系统
    execSync(`node bin/lemon.js human request --from "${myAgentId}" --type api_key --key "PROXY_URL" --reason "我被 Cloudflare 的高级验证码拦截了,Scrapling的默认绕过失败,请给我配置收费动态代理URL或给对应的第三方接口"`);
    process.exit(1); // 安全下线,等老板给配置后重启
  }
}