網絡爬蟲 - Cloudflare worker 免費proxy list
動機
最近需要用puppeteer去爬比賽的賽果,要爬每個參考者的分數。剛開始是可以成功拿到資料,但在幾分鐘後就會開始失敗回傳錯誤,那應該是ip被block了,所以就尋找有沒有免費的proxy server(窮)。找過一些說提供免費proxy的網站,但大多都很快就失效。後來找到cloudflare worker服務,Cloudflare Workers 是由 Cloudflare 提供的一種serverless無伺服器計算平台,允許開發者在其全球分佈的邊緣網路上運行代碼。這項技術使得開發者能夠在接近用戶的位置執行代碼,從而顯著降低延遲並提高應用性能。 而Cloudflare 一直都是佛心公司,提供很多免費的資源,Cloudflare workers 免費plan就提供每日100,000要求數。
Coding
這邊是基本的程式,發送請求需要在url param提供proxyUrl
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
const proxyUrl = url.searchParams.get('proxyUrl'); // get a query param value (?proxyUrl=...)
const modify = url.searchParams.has('modify'); // check if a query param is set (?proxyUrl=...&modify)
if (!proxyUrl) {
return new Response('Bad request: Missing `proxyUrl` query param', { status: 400 });
}
// make subrequests with the global `fetch()` function
let res = await fetch(proxyUrl, request);
// optionally, modify the respone
if (modify) {
res = new Response(res.body, res);
res.headers.set('X-My-Header', 'My Header Value');
}
return res;
},
};
我把deploy的script上傳到了github連結
需要安裝cloudflare wrangler 安裝教學
然後修改wrangler.toml裡面的name就可以用wrangler命令進行部署
wrangler deploy
也可以用我建立好的npm script
yarn deploy
小提示
因為只有一個worker ip可能沒改變的那麼快,所以我用上面的script建立了worker1-worker10,透過隨機發送給不同的worker來達成轉ip的要求。