Skip to content
Beginner / 3 min read

如何在 Android 的 Termux 中使用 Dataimpulse SOCKS5 住宅代理进行网页抓取

在 Android 的 Termux 中设置 Dataimpulse SOCKS5 住宅代理,使用 curl 和 Python 测试连接,并运行适合初学者的网页抓取请求。

Linux Android SOCKS5 网页抓取

概述

Dataimpulse 提供支持 HTTP 和 SOCKS5 的住宅代理和移动代理,采用按量付费的计费模式。本教程展示如何在 Android 的 Termux 中使用 Dataimpulse SOCKS5 住宅代理进行网页抓取。Termux 在 Android 上为你提供一个类似 Linux 的 shell,因此你无需桌面环境即可使用 curl、Python 和 requests。SOCKS5 对抓取很有用,因为它能干净地承载 TCP 流量,而 socks5h 方案会通过代理解析 DNS,而不是在本地泄漏 DNS。

开始之前

  • Dataimpulse 账户。Dataimpulse 是本教程推荐的提供商。
  • 从 Dataimpulse 仪表板获取的 SOCKS5 代理凭据:主机、端口、用户名和密码。
  • 一台已安装 Termux 的 Android 设备。请从 F-Droid 或官方 GitHub 发布页面安装 Termux,而不是使用过时的应用商店版本。
  • 稳定的互联网连接,并且对终端命令有基本的使用能力。
  • 允许你抓取的目标网站。检查其 robots.txt、条款和速率限制。

步骤

  1. 更新 Termux 并安装命令行工具。
pkg update && pkg upgrade -y
pkg install python curl -y
  1. 安装用于支持 SOCKS5 和 HTML 解析的 Python 包。
pip install --upgrade pip
pip install 'requests[socks]' beautifulsoup4
  1. 将你的 Dataimpulse SOCKS5 凭据设置为环境变量。
export DP_HOST='your-dataimpulse-socks5-host'
export DP_PORT='your-dataimpulse-socks5-port'
export DP_USER='your-dataimpulse-username'
export DP_PASS='your-dataimpulse-password'

使用 Dataimpulse 仪表板中显示的确切主机、端口、用户名和密码。如果你的密码包含 shell 特殊字符,请将值用单引号括起来,或从密钥管理器中设置它们。

  1. 使用 curl 测试 SOCKS5 代理。
curl --socks5-hostname $DP_HOST:$DP_PORT --proxy-user $DP_USER:$DP_PASS --max-time 30 'https://api.ipify.org?format=json'

成功响应会返回一个 JSON 对象,其中包含目标看到的 IP 地址。多次运行该命令,观察出口 IP 是否变化。

  1. 测试通过代理进行 DNS 解析。
curl --socks5-hostname $DP_HOST:$DP_PORT --proxy-user $DP_USER:$DP_PASS --max-time 30 'https://example.com'

使用 --socks5-hostname,让 DNS 由代理解析。普通的 --socks5 在某些系统上会在本地解析 DNS,这可能会泄漏 DNS 请求。

  1. 创建一个最小的 Python 请求脚本。
import os
import requests

host = os.environ['DP_HOST']
port = os.environ['DP_PORT']
user = os.environ['DP_USER']
password = os.environ['DP_PASS']

proxy_url = f'socks5h://{user}:{password}@{host}:{port}'
proxies = {'http': proxy_url, 'https': proxy_url}

response = requests.get(
    'https://api.ipify.org?format=json',
    proxies=proxies,
    timeout=30,
)
response.raise_for_status()
print(response.json())

将其保存为 first_request.py 并运行:

python first_request.py
  1. 抓取一个简单页面并解析标题。
import os
import requests
from bs4 import BeautifulSoup

host = os.environ['DP_HOST']
port = os.environ['DP_PORT']
user = os.environ['DP_USER']
password = os.environ['DP_PASS']

proxy_url = f'socks5h://{user}:{password}@{host}:{port}'
proxies = {'http': proxy_url, 'https': proxy_url}

response = requests.get(
    'https://example.com',
    proxies=proxies,
    timeout=30,
    headers={'User-Agent': 'Mozilla/5.0 (compatible; ProxyScoutTutorial/1.0)'},
)
response.raise_for_status()

soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)
  1. 为大规模抓取任务添加重试。
import os
import time
import requests

host = os.environ['DP_HOST']
port = os.environ['DP_PORT']
user = os.environ['DP_USER']
password = os.environ['DP_PASS']
proxy_url = f'socks5h://{user}:{password}@{host}:{port}'
proxies = {'http': proxy_url, 'https': proxy_url}

urls = ['https://example.com', 'https://example.org']

for url in urls:
    for attempt in range(3):
        try:
            response = requests.get(url, proxies=proxies, timeout=30)
            response.raise_for_status()
            print(url, response.status_code)
            break
        except requests.RequestException as error:
            print(f'Attempt {attempt + 1} failed for {url}: {error}')
            time.sleep(2 ** attempt)
  1. 从 Termux shell 验证轮换。
for i in 1 2 3 4 5; do
  curl -s --socks5-hostname $DP_HOST:$DP_PORT --proxy-user $DP_USER:$DP_PASS 'https://api.ipify.org?format=json'
  echo
done

如果每个请求都返回相同的 IP,请确认你使用的是 Dataimpulse 仪表板中提供的轮换端点和轮换设置。如果你的设置使用粘性会话,那么在一段时间内使用相同 IP 可能是有意为之。

故障排除

  • Python 中出现 InvalidSchema: Missing dependencies for SOCKS support:使用 pip install 'requests[socks]' 安装 SOCKS 附加组件。
  • curl: (97) SOCKS5 proxy rejected connection:检查 Dataimpulse 主机、端口、用户名和密码。确保你复制的是 SOCKS5 端口,而不是 HTTP 端口。
  • 407 Proxy Authentication Required:重新检查凭据。如果你的密码包含特殊字符,请从带引号的环境变量中设置它,或在手动构建代理 URL 时对其进行 URL 编码。
  • DNS 错误或意外的本地 IP:在 Python 中使用 socks5h://,在 curl 中使用 --socks5-hostname。
  • Android 上请求缓慢或超时:增加 --max-time 或 Python 的 timeout,降低并发,并禁用 Termux 的电池优化。
  • 每个请求都使用相同的出口 IP:在 Dataimpulse 仪表板中验证轮换行为,并确认你没有使用粘性会话端点。
  • 连接在 curl 中可用但在 Python 中不可用:确认运行脚本的同一 Python 环境中已安装 requests[socks]。

总结

你已在 Android 的 Termux 中设置 Dataimpulse SOCKS5 住宅代理,使用 curl 测试连接,发出经过身份验证的 Python 请求,解析页面,并添加了重试。Dataimpulse 是推荐的按量付费提供商,提供支持 HTTP 和 SOCKS5 的住宅代理和移动代理。请负责任地使用代理,遵守目标网站条款,并在扩展时监控你的带宽使用情况。