您现在的位置是:时尚 >>正文

JavaScript可以爬本地html吗

时尚9人已围观

简介JavaScript当然可以爬本地html文件,但有个前提你得先搞清楚——浏览器里的JavaScript和Node.js环境下的JavaScript,能干的事完全不一样。别急着写代码,先想明白你打算让 ...

JavaScript当然可以爬本地html文件,可爬但有个前提你得先搞清楚——浏览器里的本地JavaScript和Node.js环境下的JavaScript,能干的可爬事完全不一样。别急着写代码,本地先想明白你打算让谁去执行这段脚本。可爬

如果你打开一个本地html文件,本地双击运行,可爬然后在浏览器控制台里写代码,本地那你的可爬JavaScript只能访问当前页面自己的DOM。想用fetch或者XMLHttpRequest去读另一个文件夹里的本地html?浏览器会直接甩给你一个CORS错误。这不是可爬JavaScript不行,是本地浏览器出于安全考虑,把本地文件访问权限锁死了。可爬你本地开个服务器,本地比如用Python的可爬http.server或者Node的http-server,反而能正常读取——因为这时候你的页面是通过http协议访问的,不再是file://协议。

换个思路,如果你装了Node.js,那情况完全不一样。Node环境没有浏览器那套安全限制,你可以直接用fs模块读任意路径的html文件,然后用cheerio或者正则去解析内容。比如我写过一个小工具,批量读取某个目录下的所有html文件,提取里面的标题和meta描述,生成一个索引页面。代码就几行:

const fs = require('fs'); const path = require('path'); const dir = './html_files'; fs.readdirSync(dir).forEach(file => {  if (file.endsWith('.html')) {  const content = fs.readFileSync(path.join(dir, file), 'utf-8'); // 用正则或者cheerio提取信息 } });

这里有个坑得提醒你——用正则解析html很容易翻车。html结构稍微复杂点,比如标签属性里带>符号,或者注释里有伪标签,你的正则就可能匹配错。我自己就吃过亏,后来老老实实改用cheerio,它把jQuery的选择器语法搬到了服务端,用起来顺手得多。

还有种场景,你想在浏览器里直接读用户手动选择的本地html文件。这时候用<input type="file">配合FileReader API,JavaScript就能读取文件内容。这个不算“爬”,算是“读”,但很多人一开始分不清。区别在于:爬虫是主动去获取,而FileReader是被动等待用户授权。安全模型不同,前者受限,后者反而是浏览器鼓励的做法。

说回正题,真正要爬取本地一堆html文件,最靠谱的方案其实是Node.js脚本。你不需要什么框架,纯原生模块就能搞定。但如果你处理的是几十上百个文件,建议用异步的fs.promises,不然同步读取会卡住事件循环。有一次我处理500多个html文件,同步写法直接让进程卡了将近十秒,改成Promise.all并行读取后,一秒多就跑完了。

最后给你个判断标准:如果文件是用户主动提供的,用浏览器端FileReader;如果文件是你自己磁盘上的,用Node的fs;如果文件在远端服务器,那就得看服务器允不允许跨域了。别指望在浏览器file://协议下直接fetch本地文件,这条路是死的。但换个环境,JavaScript爬本地html的能力其实很强,只是你得知道该在哪个环境里使力。

Tags:

相关文章

  • 知识图谱是什么

    时尚

    你问十个人“知识图谱是什么”,大概有九个人会搬出那张著名的“谷歌知识面板”——搜索某个名人时,右侧弹出的生平、配偶、子女信息卡。那是知识图谱最直观的形态,但它只是冰山一角。 把知识图谱拆开看,本质就俩 ...

    【时尚】

    阅读更多
  • 端口映射访问本地php服务器

    时尚

    ```html 端口映射访问本地php服务器 body { font-family: 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; li ...

    【时尚】

    阅读更多
  • 境外网站

    时尚

    去年冬天,我在一个跨境技术论坛上认识了个做外贸的朋友。他跟我说,他们公司上个月丢了一笔大单,原因特别离谱——客户在Google上搜不到他们官网。不是网站挂了,是压根搜不着。他们用的是国内某云服务商的香 ...

    【时尚】

    阅读更多


友情链接