用于抓取动态内容的顶级免费代理工作流程

用于抓取动态内容的顶级免费代理工作流程

穿越迷宫:动态内容抓取的免费代理工作流程

了解动态内容抓取

动态内容,这股驱动现代网页活力的活力,无法通过简单的 HTTP 请求实现。它由 JavaScript 渲染,需要的不仅仅是简单的 GET 请求;它需要精心编排——伪装成合法浏览器的请求、绕过 IP 禁令的代理,以及能够解读字里行间含义的代码。

代理在动态抓取中的作用

代理是我们数字伪装中的面具,对于以下方面至关重要:

  • 规避基于 IP 的速率限制
  • 规避地理限制
  • 分配流量以避免检测

但如何才能在不花大钱的情况下获得这种匿名性呢?免费代理——转瞬即逝、难以驾驭,却又不可或缺。让我们以外科手术般的精准度剖析它们的用途。


工作流程 1:使用 Requests 和 BeautifulSoup 轮换免费公共代理

原料

步骤

  1. 收获代理
    抓取免费代理列表,例如来自 免费代理列表.net.

“`python
导入请求
从 bs4 导入 BeautifulSoup

定义获取代理():
url = 'https://free-proxy-list.net/'
汤 = BeautifulSoup(requests.get(url).content,'html.parser')
代理=设置()
对于 soup.find('table', id='proxylisttable').tbody.find_all('tr') 中的行:
如果 row.find_all('td')[6].text == 'yes': 仅限 # HTTPS 代理
ip = row.find_all('td')[0].文本
端口 = row.find_all('td')[1].文本
proxies.add(f'{ip}:{port}')
返回列表(代理)
“`

  1. 轮换请求代理

“`python
随机导入

代理=获取代理()

def fetch_with_proxy(url):
代理 = 随机.选择(代理)
尝试:
resp = 请求.get(url,代理={“http”:f”http://{proxy}”,“https”:f”http://{proxy}”},超时=5)
如果 resp.status_code == 200:
返回相应文本
例外情况:
经过
返回 None
“`

  1. 处理动态内容
    对于 JS 最少的页面,检查网络流量以找到 XHR 端点并直接获取数据。

优点和缺点

特征 优点 缺点
设置 快速、简单 代理通常不可靠
匿名 IP轮换减少禁令 代理频繁死机/缓慢
动态内容 仅适用于简单的 JS 渲染网站 完整的 JS 网站需要浏览器模拟器

工作流程 2:使用 Selenium 和免费代理轮换进行抓取

原料

步骤

  1. 获取代理列表

与上述逻辑类似,但针对 sslproxies.org.

  1. 配置 Selenium 使用代理

“`python
从 selenium 导入 webdriver
从 selenium.webdriver.chrome.options 导入选项

def get_chrome_driver(代理):
选项=选项()
选项.add_argument(f'--proxy-server=http://{proxy}')
选项.add_argument('--无头')
返回 webdriver.Chrome(options=options)
“`

  1. 抓取动态内容

Python
代理=获取代理()
驱动程序 = get_chrome_driver(随机选择(代理))
driver.get('https://quotes.toscrape.com/js/')
内容 = 驱动程序.page_source
驱动程序.退出()

诗意注解

使用 Selenium,浏览器就是您的画笔,以人类用户看到的方式绘制页面 - JavaScript、CSS 和所有微妙的交互色调。

优点和缺点

特征 优点 缺点
JS渲染 处理任何动态内容 资源密集型
代理轮换 有效屏蔽 IP 代理可能会减慢或阻止浏览器
检测 更像人类,更难察觉 免费代理经常被大型网站屏蔽

工作流程 3:面向 Node.js 爱好者的 Puppeteer 与 ProxyChain

原料

步骤

  1. 获取免费代理

JavaScript的
const axios = require('axios');
异步函数 getProxies() {
const res = await axios.get('https://www.proxy-list.download/api/v1/get?type=https');
返回 res.data.split('\r\n').filter(Boolean);
}

  1. 使用 ProxyChain 和 Puppeteer 轮换代理

“`javascript
const puppeteer = require('puppeteer');
const ProxyChain = require('proxy-chain');

(异步 () => {
const proxies = 等待 getProxies();
for (代理的 const proxyUrl) {
const anonymizedProxy = await ProxyChain.anonymizeProxy(http://${proxyUrl});
const browser = await puppeteer.launch({
参数:[--proxy-server=${anonymizedProxy}, '–no-sandbox', '–disable-setuid-sandbox'],
无头:是的,
});
const page = await browser.newPage();
尝试 {
等待页面.goto('https://quotes.toscrape.com/js/',{waitUntil:'networkidle2'});
const content = await page.content();
// 处理内容...
} 捕获(e){
// 跳过坏代理
}
等待浏览器.关闭();
}
})();
“`

优点和缺点

特征 优点 缺点
自动化 Node.js 中的健壮脚本 Node.js 依赖项
代理轮换 ProxyChain 管理故障 免费代理通常不稳定/缓慢
动态内容 Puppeteer 渲染所有 JS 通过代理速度限制速率

工作流程4:使用Scrapy + 免费代理中间件进行智能请求调度

原料

步骤

  1. 安装中间件

pip 安装 scrapy-rotating-proxies

  1. 配置 Scrapy 设置

Python
#设置.py
旋转代理列表路径 = 'proxies.txt'
下载器中间件 = {
'rotating_proxies.middlewares.RotatingProxyMiddleware':610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

  1. 填充代理列表

下载并保存代理至 代理.txt:

https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=1000&country=all&ssl=all&anonymity=all

  1. 使用 Scrapy Spider 进行抓取

Scrapy 借助旋转代理,在动态内容的花园中轻手轻脚地穿梭。完整的 JS 代码,请使用 scrapy 剧作家:

狂欢
pip 安装 scrapy-playwright

在你的蜘蛛中:

“`python
导入 scrapy

类 QuotesSpider(scrapy.Spider):
名称 =“引号”
start_urls = ['https://quotes.toscrape.com/js/']

   def start_requests(self): 对于 self.start_urls 中的 url:yield scrapy.Request(url,meta={“playwright”:True}) def parse(self,response): 对于 request.css(“div.quote”) 中的 quote:yield { “text”:quote.css(“span.text::text”).get(), “author”:quote.css(“small.author::text”).get(), }

“`

优点和缺点

特征 优点 缺点
速度 高效的请求调度 Scrapy的学习曲线
代理轮换 中间件处理禁令 免费代理不太可靠
JS 支持 使用 Playwright 处理完整的 JS 重量级设置

工作流程 5:通过免费代理网关进行面向 API 的数据抓取

原料

步骤

  1. 获取 API 密钥或代理端点

注册并获取免费端点。

  1. 通过代理网关路由请求

对于 ScraperAPI:

Python
api_key = '你的 API 密钥'
url = f'http://api.scraperapi.com/?api_key={api_key}&url=https://quotes.toscrape.com/js/'
响应 = 请求.get(url)

对于 Web 共享代理,使用方法与前面的示例相同。

优点和缺点

特征 优点 缺点
可靠性 托管代理,减少停机时间 有限的免费请求
易于使用 摘要代理轮换 可能会阻止某些网站
动态内容 一些 API 在返回之前渲染 JS 频繁使用的付费套餐

比较汇总表

工作流程 动态 JS 支持 代理轮换 可靠性 免费限制 最佳用例
请求+免费代理 低的 手动的 低的 代理被阻止/速度慢 简单的 XHR API
Selenium + 免费代理 高的 手动的 中等的 代理被阻止,CPU 使用率高 复杂 JS 网站,规模较小
Puppeteer + ProxyChain 高的 自动化 中等的 代理频繁失败 Node.js 自动化
Scrapy + 旋转代理 高(与剧作家合作) 自动化 中等的 中间件配置,慢速代理 可扩展、先进的抓取
代理 API 网关 高(取决于 API) 自动化 高的 请求数量有限,需要注册 一次性、可靠的抓取

资源


让你的代码成为凿子,让你的代理成为大理石——耐心雕刻,因为每一个动态页面都是一个数字雕塑,等待着表面之下的启示。

泰奥菲尔·博韦

泰奥菲尔·博韦

代理分析师

21 岁的 Théophile Beauvais 是 ProxyMist 的代理分析师,他专门负责整理和更新来自世界各地的代理服务器综合列表。凭借与生俱来的技术和网络安全天赋,Théophile 已成为团队中不可或缺的一员,确保向全球用户免费提供可靠的 SOCKS、HTTP、精英和匿名代理服务器。Théophile 在风景如画的里昂市出生和长大,从小就对数字隐私和创新充满热情。

评论 (0)

这里还没有评论,你可以成为第一个评论者!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注