13 Feet Ladder - 自托管付费墙绕过工具
13 Feet Ladder
一个类似12ft.io但可自托管的付费墙绕过工具,支持12ft.io无法处理的网站。
功能特性
- 模拟GoogleBot:通过Google爬虫用户代理获取网页完整内容
- 自托管解决方案:可在本地或私有服务器部署
- 支持多种付费墙:特别针对Medium、纽约时报等网站优化
- 暗黑模式:提供用户友好的暗黑/明亮主题切换
- 简单易用:只需输入URL即可获取无付费墙内容
- Docker支持:提供容器化部署方案
安装指南
Docker方式安装
git clone https://github.com/wasi-master/13ft.git
cd 13ft
docker compose up
或直接拉取镜像:
docker pull wasimaster/13ft
# 或
docker pull ghcr.io/wasi-master/13ft:0.2.3
Python脚本方式安装
- 确保已安装Python
- 克隆仓库并安装依赖:
cd app/
python -m pip install -r requirements.txt
- 运行服务:
python portable.py
使用说明
- 访问本地服务(默认http://localhost:5000)
- 在输入框中输入目标URL
- 点击提交按钮获取无付费墙内容
API使用示例
curl -X POST http://localhost:5000/article -d "link=https://medium.com/some-paywalled-article"
核心代码
付费墙绕过核心逻辑
def bypass_paywall(url):
"""
绕过指定URL的付费墙
通过模拟GoogleBot请求获取完整内容
"""
if url.startswith("http"):
response = requests.get(url, headers=googlebot_headers)
response.encoding = response.apparent_encoding
return add_base_tag(response.text, response.url)
try:
return bypass_paywall("https://" + url)
except requests.exceptions.RequestException as e:
return bypass_paywall("http://" + url)
基础URL处理
def add_base_tag(html_content, original_url):
"""
为HTML内容添加base标签
确保页面资源能正确加载
"""
soup = BeautifulSoup(html_content, 'html.parser')
parsed_url = urlparse(original_url)
base_url = f"{parsed_url.scheme}://{parsed_url.netloc}/"
if parsed_url.path and not parsed_url.path.endswith('/'):
base_url = urljoin(base_url, parsed_url.path.rsplit('/', 1)[0] + '/')
# 添加base标签到HTML头部
if not soup.find('base'):
new_base_tag = soup.new_tag('base', href=base_url)
if soup.head:
soup.head.insert(0, new_base_tag)
else:
head_tag = soup.new_tag('head')
head_tag.insert(0, new_base_tag)
soup.insert(0, head_tag)
return str(soup)
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码