AppleScript嵌套循环问题:无法加载关键词获取URL链接及curl可行性咨询
嘿,我来帮你解决这个问题~先聊聊你的AppleScript为啥可能没达到预期,再给你讲讲纯用curl配合命令行工具怎么实现需求。
一、你的AppleScript问题排查与修复
从你给出的代码片段来看,大概率是这几个地方出了问题:
- 读取
KEYWORDS.txt时,没把整个文本按换行分割成单个关键词,导致构造的URL可能带了一堆换行或者整个文本串 - 没有对关键词做URL编码,要是关键词里有空格、特殊字符,直接拼到URL里会导致请求无效
- 后续提取链接的逻辑没写完,AppleScript本身处理HTML解析比较麻烦,通常得调用命令行工具来辅助
给你一个修正后的完整AppleScript示例,解决这些问题:
-- 获取脚本所在目录的POSIX路径,避免Finder路径的兼容性问题 set scriptPath to POSIX path of (path to me) set scriptDir to text 1 thru ((offset of "/" in reverse of scriptPath) * -1) of scriptPath set keywordsFile to scriptDir & "KEYWORDS.txt" -- 读取关键词文件,按换行分割成单个关键词的列表 set keywordText to do shell script "cat " & quoted form of keywordsFile set keywordList to paragraphs of keywordText -- 遍历每个关键词处理 repeat with keyword in keywordList if keyword is not "" then -- 跳过空行 -- 对关键词做URL编码,处理空格、特殊字符 set encodedKeyword to do shell script "python3 -c 'import urllib.parse; print(urllib.parse.quote(\"" & keyword & "\"))'" set searchURL to "https://teespring.com/search?q=" & encodedKeyword -- 用curl抓取页面,再用grep+sed提取所有href链接 set pageContent to do shell script "curl -s " & quoted form of searchURL set linkList to do shell script "echo " & quoted form of pageContent & " | grep -o 'href=\"[^\"\\\"]*\"' | sed 's/href=\"//; s/\"$//'" -- 把提取的链接追加到输出文件 do shell script "echo '" & linkList & "' >> " & quoted form of (scriptDir & "extracted_links.txt") display dialog "提取*关键词*「" & keyword & "」的链接完成" end if end repeat
这个脚本会自动读取同目录下的KEYWORDS.txt,按行拆分关键词,编码后构造合法的搜索URL,再用curl抓页面提取所有链接,最后保存到extracted_links.txt里。
二、纯curl命令行实现方案
当然可以只用curl配合常用的命令行工具(grep、sed)完成,甚至不需要AppleScript,写个shell脚本更轻量高效。操作步骤如下:
- 先确保你的
KEYWORDS.txt每行一个关键词,放在脚本同目录下 - 创建一个名为
extract_teespring_links.sh的文件,内容如下:
#!/bin/bash # 定位脚本所在目录 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd) KEYWORDS_FILE="$SCRIPT_DIR/KEYWORDS.txt" OUTPUT_FILE="$SCRIPT_DIR/extracted_links.txt" # 清空输出文件(避免重复追加) > "$OUTPUT_FILE" # 逐行读取关键词处理 while IFS= read -r keyword; do if [[ -n "$keyword" ]]; then # URL编码关键词,处理特殊字符 encoded_keyword=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$keyword'))") search_url="https://teespring.com/search?q=$encoded_keyword" echo "正在处理*关键词*: $keyword" # 抓取页面→提取href→清理格式→过滤无效锚点链接 curl -s "$search_url" | grep -o 'href="[^"]*"' | sed 's/href="//; s/"$//' | grep -v '^#' >> "$OUTPUT_FILE" fi done < "$KEYWORDS_FILE" echo "所有链接已提取到 $OUTPUT_FILE"
- 给脚本加执行权限:
chmod +x extract_teespring_links.sh - 直接运行:
./extract_teespring_links.sh
如果你的系统里有urlencode命令,也可以把Python的编码部分换成encoded_keyword=$(urlencode "$keyword"),会更简洁。
内容的提问来源于stack exchange,提问作者GTO
相关产品推荐
相关产品推荐

