只用 JavaScript,我写了一个无需后端的网页数据爬取神器!
点击上方 程序员成长指北,关注公众号
回复1,加入高级Node交流群
我曾想快速获取一些电商网站上的商品信息,但又不想搭建服务器或部署爬虫服务。所以我动手用 JavaScript 写了一个 Chrome 插件,一键提取网页上的数据,清洗整理后直接导出成表格。
想要快速爬数据,但不想折腾后端
事情是这样的,我经常浏览一些小众电商网站,页面里有:
-
商品价格
-
商品标题
-
用户评分
这些信息我都想整理进表格里。但我又不想:
-
配置 Puppeteer 或 Selenium
-
写后端接口
-
部署什么云爬虫
我只想打开网页,点个按钮,立刻拿到结构化数据。
Chrome 插件的目录结构
我首先创建了一个插件项目,结构非常简单:
web-scraper-extension/
├── manifest.json
├── content.js
├── popup.html
├── popup.js
├── styles.css
manifest.json 是插件的核心配置文件:
{
"manifest_version": 3,
"name": "Web Scraper Pro",
"version": "1.0",
"description": "一键抓取电商页面数据",
"permissions": ["activeTab", "scripting"],
"action": {
"default_popup": "popup.html",
"default_icon": "icon.png"
},
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
}
这个配置确保插件可以注入脚本到任何网页中。
在当前标签页中注入爬虫逻辑
在 popup.js 里,我监听点击事件,让插件在当前页面执行爬取函数:
document.getElementById("scrape-btn").addEventListener("click", async () => {
let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: scrapePageData
});
});
这个函数 scrapePageData 是定义在 content.js 中的。
如何从页面中提取商品信息
在 content.js 中,我用原生 DOM API 获取商品卡片信息:
function scrapePageData() {
const products = document.querySelectorAll(".product-card");
const data = [];
products.forEach((product) => {
const title = product.querySelector(".title")?.innerText || "N/A";
const price = product.querySelector(".price")?.innerText || "N/A";
const rating = product.querySelector(".stars")?.innerText || "N/A";
data.push({ title, price, rating });
});
console.table(data);
downloadCSV(data);
}
全部逻辑都是在用户的浏览器中执行,不发请求,不调用 API,纯前端处理。
将数据导出为 CSV 文件
我还写了一个小工具函数,把数据转成 CSV 并触发下载:
function downloadCSV(data) {
const headers = Object.keys(data[0]).join(",");
const rows = data.map(obj =>Object.values(obj).join(",")).join("\n");
const csv = `${headers}\n${rows}`;
const blob = new Blob([csv], { type: "text/csv" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "products.csv";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
用户点“Scrape”按钮后,就会自动下载 products.csv。
简单但好用的 UI 界面
popup.html 提供了一个基础的操作界面:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<h1>Web Scraper Pro</h1>
<button id="scrape-btn">抓取商品</button>
<script src="popup.js"></script>
</body>
</html>
简洁直观,足够用了。
给界面加点样式(虽然不是必需)
body {
font-family: Arial;
width: 250px;
padding: 10px;
background: #f8f9fa;
}
button {
background: #007bff;
border: none;
color: white;
padding: 10px;
width: 100%;
cursor: pointer;
border-radius: 5px;
}
虽然不是核心功能,但样式清爽,用户体验会更好。
应对动态加载内容:MutationObserver 来了
function waitForProducts(callback) {
const observer = new MutationObserver(() => {
if (document.querySelectorAll(".product-card").length > 5) {
observer.disconnect();
callback();
}
});
observer.observe(document.body, { childList: true, subtree: true });
}
现在就算是异步渲染的页面,也能可靠抓取了。
没有 CORS、IP 封锁、隐私风险
因为我们是在浏览器中操作 DOM,而不是发网络请求:
-
不会遇到 CORS 跨域限制
-
不会被服务器封 IP
-
不需要代理
当然,为了安全和隐私,插件只在用户主动点击时运行,并且在 manifest.json 中明确声明了权限。
本地调试插件
测试流程:
-
打开
chrome://extensions -
开启“开发者模式”
-
点击“加载已解压的扩展程序”
-
选择你的插件文件夹
-
随便打开一个商品页面,点击插件按钮测试功能
打包并发布到 Chrome 应用商店
发布流程如下:
-
把整个项目文件夹打包成 ZIP
-
登录 Chrome Web Store Developer Dashboard
-
支付一次性 5 美元的开发者认证费用
-
上传 ZIP 包,填写插件描述、上传截图
-
提交审核
我提交后 3 天就通过审核了。
添加 Google Analytics(可选功能)
我还加了匿名埋点统计,分析用户最常抓取哪些网页:
fetch("https://www.google-analytics.com/collect", {
method: "POST",
body: "v=1&t=event&tid=UA-XXXXX-Y&cid=555&ec=Scraper&ea=Click&el=Popup"
});
方便后续优化功能和提升用户体验。
一些收获和感悟
-
构建强大的爬虫工具,其实不需要后端
-
Chrome 插件的能力被很多人低估了,搭建门槛很低
-
用户喜欢一键式、零配置的解决方案
结语
这是我开发速度最快、上线最快的一款工具。它不需要部署,不需要服务器,完全运行在浏览器中,使用门槛极低。
如果你也想快速抓取网页数据,不妨试试 JavaScript + Chrome 扩展这个组合 —— 效率极高,体验极爽!
Node 社群
我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。
“分享、点赞、在看” 支持一波👍
更多推荐

所有评论(0)