前端远原生js爬取数据的小案例

这篇具有很好参考价值的文章主要介绍了前端远原生js爬取数据的小案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用方法

前端远原生js爬取数据的小案例,辅助撸码,前端,javascript,爬虫,网络爬虫

注意分页的字段需要在代码里面定制化修改,根据你爬取的接口,他的业务规则改代码中的字段。比如我这里总条数叫total,人家的不一定。返回的数据我这里是data.rows,看看人家的是叫什么字段,改改代码。再比如我这里的分页叫pageNum,人家的可能叫pageNo

效果

分页下载
前端远原生js爬取数据的小案例,辅助撸码,前端,javascript,爬虫,网络爬虫

上源码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>爬虫</title>
		<style>
			.container{
				width: 50%;
				margin: 50px auto;
			}
			input,
			textarea {
				height: 30px;
				width: -webkit-fill-available;
				margin-bottom: 15px;
			}

			textarea {
				height: 120px;
			}

			button {
				height: 40px;
				width: 110px;
				font-size: 18px;
			}

			#h1,
			#h2 {
				text-align: center;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div>
				接口:<input id="api" type="text" /> <br />
				请求头:<textarea id="headers" type="text" placeholder="要json格式"></textarea><br />
				参数:<textarea id="textarea" placeholder="要json格式"></textarea>
			</div>
			<div style="text-align: right;">
				<button onclick="crawling()">拉取</button>
			</div>

			<h1 id="h1"></h1>
			<h2 id="h2"></h2>
		</div>
		
		
		
		<script>
			var total = 0;
			var pageNum = 1;
			var pageSize = 30;
			var api = "";
			var headers = "";
			var textarea = "";
			const h1 = document.querySelector("#h1");
			const h2 = document.querySelector("#h2");

			async function crawling() {
				api = document.querySelector("#api").value;
				headers = document.querySelector("#headers").value;
				textarea = document.querySelector("#textarea").value;

				h1.innerHTML = "开始爬取...";
				const data = await getData();
				total = data.total;

				const page = Math.ceil(total / pageSize);
				saveFile(data.rows,`第 1 页 / 共${page}`);

				loading();
			}

			async function loading() {
				const page = Math.ceil(total / pageSize);
				h2.innerHTML = `一共${total}条,${page}`;
				for (let i = 1; i < page; i++) {
					pageNum++;
					h2.innerHTML = `一共${total}条,${page}页,正在第${i+1}`;
					const data = await getData();
					saveFile(data.rows,`${i+1}页 / 共${page}`);
				}

				h1.innerHTML = "爬取完毕,已下载数据";
				h2.innerHTML = "";
				total = 0;
				pageNum = 1;
			}

			async function getData() {
				const response = await fetch(api, {
					method: "POST",
					mode: "cors",
					cache: "no-cache",
					credentials: "same-origin",
					headers: {
						"Content-Type": "application/json",
						...JSON.parse(headers)
					},
					body: JSON.stringify({
						...JSON.parse(textarea),
						"pageSize": pageSize,
						"pageNum": pageNum
					})
				});
				return response.json();
			}

			function saveFile(data,name) {
				const blob = new Blob([JSON.stringify(data)], {
					type: "application/json"
				});
				let link = document.createElement("a"); // 创建下载的实体标签
				link.href = URL.createObjectURL(blob); // 创建下载的链接
				link.download = name + ".json"; // 下载的文件名
				link.click(); // 执行下载
				URL.revokeObjectURL(link.href); // 下载完成释放掉blob对象
			}
		</script>
	</body>
</html>

开始在小小的网站里面爬呀爬呀爬吧…

还有一种

整体下载为一个文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>爬虫</title>
		<style>
			.container {
				width: 50%;
				margin: 50px auto;
			}

			input,
			textarea {
				height: 30px;
				width: -webkit-fill-available;
				margin-bottom: 15px;
			}

			textarea {
				height: 120px;
			}

			button {
				height: 40px;
				width: 110px;
				font-size: 18px;
			}

			#h1,
			#h2,
			#error {
				text-align: center;
			}

			#error {
				color: red;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div>
				接口:<input id="api" type="text" /> <br />
				token:<input id="token" type="text" /><br />
				参数:<textarea id="textarea" placeholder="要json格式"></textarea>
			</div>
			<div style="text-align: right;">
				<button onclick="crawling()">拉取</button>
			</div>

			<h1 id="h1"></h1>
			<h2 id="h2"></h2>
			<p id="error"></p>
		</div>



		<script>
			var total = 0;
			var datas = [];
			var pageNum = 1;
			var pageSize = 30;
			var api = "";
			var token = "";
			var textarea = "";
			const h1 = document.querySelector("#h1");
			const h2 = document.querySelector("#h2");
			const error = document.querySelector("#error");

			async function crawling() {
				api = document.querySelector("#api").value;
				token = document.querySelector("#token").value;
				textarea = document.querySelector("#textarea").value;

				h1.innerHTML = "开始爬取...";
				const res = await getData();
				if (res.code !== 0) {
					error.innerHTML = `第 1 页错误`;
					return;
				}
				total = res.total;
				datas.push(res.rows);
				loading();
			};

			async function getData() {
				const response = await fetch(api, {
					method: "POST",
					mode: "cors",
					cache: "no-cache",
					credentials: "same-origin",
					headers: {
						"Content-Type": "application/json",
						Authorization: token
					},
					body: JSON.stringify({
						...JSON.parse(textarea),
						"pageSize": pageSize,
						"pageNum": pageNum
					})
				});
				return response.json();
			};

			async function loading() {
				const page = Math.ceil(total / pageSize);
				h2.innerHTML = `一共${total}条,${page}`;
				for (let i = 1; i < page; i++) {
					pageNum++;
					h2.innerHTML = `一共${total}条,${page}页,正在第${i+1}`;
					const res = await getData();
					if (res.code !== 0) {
						error.innerHTML += `${i}页错误`;
						continue;
					}
					datas.push(res.rows);
				};

				saveFile(datas);
				h1.innerHTML = "爬取完毕,已下载数据";
				reset();
			};

			function saveFile(data) {
				const blob = new Blob([JSON.stringify(data)], {
					type: "application/json"
				});
				let link = document.createElement("a"); // 创建下载的实体标签
				link.href = URL.createObjectURL(blob); // 创建下载的链接
				link.download = "数据" + ".json"; // 下载的文件名
				link.click(); // 执行下载
				URL.revokeObjectURL(link.href); // 下载完成释放掉blob对象
			};

			function reset() {
				h2.innerHTML = "";
				total = 0;
				pageNum = 1;
				datas = [];
			};
		</script>
	</body>
</html>

前端远原生js爬取数据的小案例,辅助撸码,前端,javascript,爬虫,网络爬虫

拓展

怎么爬取微信小程序的接口?
使用Charles 拿到接口、请求头、参数,再回来使用界面爬取


node方式爬取文章来源地址https://www.toymoban.com/news/detail-794076.html

到了这里,关于前端远原生js爬取数据的小案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(五)—— 项目-新闻头条-数据管理平台-ajax综合案例前端

    愿许秋风知我意,解我心中意难平。 推荐使用, 每个程序员都有自己的管理方式。 HTML结构: 1.为什么要提取公共前缀地址(基地址),因为公司业务可能会更换服务器,如果你不想一条一条地修改请求地址的话。 后续使用axios时,url不需要再写前缀。 2.请求成功与失败 成

    2024年01月25日
    浏览(52)
  • 云计算与大数据课程笔记(十)之容器技术与云原生辅助笔记

    微服务架构是一种将单一应用程序作为一套小服务的开发风格,每个服务运行在其独立的进程中,并通常围绕业务能力进行组织,服务之间通过轻量级的通信机制(通常是HTTP)进行交互。这种架构风格致力于提高大型复杂系统的可维护性、可扩展性和灵活性。 侵入式微服务

    2024年04月16日
    浏览(33)
  • 写了个辅助学习vite的小工具(mini-vite)

      话不多说先贴上仓库地址 mini-vite 封装的方法太多,不知道从哪个方法看起 随便一个文件就是一两千行代码,看得头皮发麻 不知道该怎么去debug,到底应该在哪个方法里面debug 没关系,这些问题在我这都能解决 移除了vite仓库中的所有注释和其他对于所要学习的vite功能用不

    2024年02月08日
    浏览(44)
  • 【爬虫案例】用Python爬取抖音热榜数据!

    目录 一、爬取目标 二、编写爬虫代码 三、同步讲解视频 3.1 代码演示视频 四、获取完整源码 您好,我是@马哥python说,一名10年程序猿。 本次爬取的目标是:抖音热榜 共爬取到50条数据,对应TOP50热榜。含5个字段,分别是: 热榜排名,热榜标题,热榜时间,热度值,热榜标签。

    2024年02月16日
    浏览(60)
  • 【爬虫案例】用Python爬取知乎热榜数据!

    目录 一、爬取目标 二、编写爬虫代码 三、同步讲解视频 3.1 代码演示视频 3.2 详细讲解视频 四、获取完整源码 您好,我是@马哥python说,一名10年程序猿。 本次爬取的目标是:知乎热榜 共爬取到6个字段,包含: 热榜排名, 热榜标题, 热榜链接, 热度值, 回答数, 热榜描述。 用

    2024年02月15日
    浏览(50)
  • 爬虫案例—京东数据爬取、数据处理及数据可视化(效果+代码)

            使用PyCharm(引用requests库、lxml库、json库、time库、openpyxl库和pymysql库)爬取京东网页相关数据(品牌、标题、价格、店铺等) 数据展示(片段):         京东网页有反爬措施,需要自己在网页登录后,获取cookie,加到请求的header中(必要时引入time库,设置爬取

    2024年02月09日
    浏览(47)
  • vue.js前端框架应用案例

    Vue.js 是一种流行的前端框架,它可以帮助开发者构建单页应用(SPA)和复杂的用户界面。以下是几个 Vue.js 的案例,涵盖了不同领域的应用: Vue.js 官方文档 :Vue.js 的官方文档本身就是一个使用 Vue.js 构建的项目。它展示了 Vue.js 的各种功能和最佳实践,包括组件、指令、混

    2024年02月21日
    浏览(50)
  • 【爬虫案例】用Python爬取百度热搜榜数据!

    目录 一、爬取目标 二、编写爬虫代码 三、同步视频讲解 四、完整源码 您好,我是@马哥python说,一名10年程序猿。 本次爬取的目标是:百度热搜榜 分别爬取每条热搜的: 热搜标题、热搜排名、热搜指数、描述、链接地址。 下面,对页面进行分析。 经过分析,此页面有XH

    2024年02月13日
    浏览(39)
  • 二挡起步——pythonweb开发Django框架,前端原生+Django后端框架002(附带小案例)

     大家好,我是csdn的博主: lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主 lqj_本人擅长微信小程序,前端,python,等方面的知识 https://blog.csdn.net/lbcyllqj?spm=1011.2415.3001.5343 哔哩哔哩欢迎关注: 小淼Develop 小淼Develop的个人空间-小淼Develop个

    2024年02月03日
    浏览(81)
  • 【FPGA教程案例98】数据处理1——基于FPGA的数据线性插值verilog实现,MATAB辅助验证

    FPGA教程目录 MATLAB教程目录 ---------------------------------------- 目录 1.软件版本 2.数据线性插值原理 3.数据线性插值的matlab仿真

    2023年04月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包