nodejs+cheerio 实现简单的网页采集(可实现简单的组装页面)_cheerio 第一个 script-程序员宅基地

技术标签: nodejs+cheerio  web前端笔记  cheerio  

1:首先可以先获取你需要采集的网页的地址:url

2:将你需要采集的url用nodejs实现请求:

 
const cheerio = require('cheerio');
const restler = Object.assign({}, require("restler"));
import htmlObject from '../utils/html-str.js';
import functionTool from '../utils/function.js';
import md5 from 'md5';
parseHtml: function (result, link, charset) {
        let $ = cheerio.load(result);
        let linkId = md5(link);
        toolManager.charsets[linkId] = charset;
        toolManager.docs[linkId] = result;
        let $head = $('head'), $body = $('body');
        $head.append('<script type="text/javascript">' + functionTool.injectJavascript + '</script>');
        $head.append(htmlObject.injectCss);
        $body.append($(htmlObject.injectMenu));
        $body.append($(htmlObject.injectToolbar));
        $body.append($(htmlObject.injectLinkId).val(linkId));
        return $.html();
    },
processDoc(req, response) {
        let link = req.query['link'];
        restler.get(link).on('complete', function (result, res) {
            if (result instanceof Error) {
                console.log('Error:', result.message);
            } else {
                let charset = res.headers['content-type'];
                if (charset) {
                    charset = /\bcharset=(.+)(?:;|$)/i.exec(charset);
                    if (charset) {
                        charset = charset[1].trim().toLowerCase();
                    }
                }
                response.write(parseHtml(result, link, charset));
            }
        });
    }

上面的functionTool.injectJavascript为你需要嵌入到采集到的网页中的js代码

同样下面的injectCss,injectMenu,injectToolbar等分别代表样式文件与html代码

 

其中引入cheerio模块的话  可以直接操作采集下来的页面(api:https://cnodejs.org/topic/5203a71844e76d216a727d2e

通过restler模块去请求界面的话,它会帮你处理好界面中文的乱码问题,(api:https:www.npmjs.com/package/restler

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012881878/article/details/80421673

智能推荐

OpenCV中的随机数与随机种子_opencv rand-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏7次。我们先从在C/C++中的随机数与随机种子说起。rand()、srand()rand()可以生成一个0~RAND_MAX之间的一个随机数,返回值是一个unsigned int类型值。rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用..._opencv rand

三天刷完《剑指OFFER编程题》--Java版本实现(第二天)_剑指offer java版-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏4次。正在更新中。。。。。。。。。剑指offer --Python版本的实现:剑指offer(1/3)第一大部分剑指offer(2/3)第二大部分剑指offer(3/3)第三大部分27.字符串的排列输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。递归法,问题.._剑指offer java版

计算机视觉迎来GPT时刻!UC伯克利三巨头祭出首个纯CV大模型!-程序员宅基地

文章浏览阅读282次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【视觉和Transformer】微信交流群扫码加入CVer知识星球,可以最快学习到最新顶会顶刊上的论文idea和CV从入门到精通资料,以及最前沿项目和应用!发论文,强烈推荐!在CVer微信公众号后台回复:LVM,即可下载论文pdf和代码链接!快学起来!转载自:机器之心仅靠视觉(像素)模型能走多远?UC 伯克利、约..._三巨头视觉大模型

qcc514x-qcc304x调试笔记-PIO相关操作_qcc304x 注册中断-程序员宅基地

文章浏览阅读720次,点赞2次,收藏5次。相关PIO接口#define PIOS_PER_BANK 32U#define PioCommonPioBank(_pio) ((_pio) / PIOS_PER_BANK)#define PioCommonPioMask(_pio) (1UL << ((_pio) % PIOS_PER_BANK))uint32 PioSetDir32Bank(uint16 bank, uint32 mask, uint32 dir);uint32 PioSet32Bank(uint16_qcc304x 注册中断

Pangu-Agent-程序员宅基地

文章浏览阅读380次,点赞7次,收藏7次。然而,在 Direct 中,即使没有明确要求,LLM 也会生成中间步骤,因为互联网上类似的小学水平问题就是这样呈现的,而这些问题很可能就包含在这些 LLM 的训练集中。因此,LLM 在这项任务中的表现会受到很大影响,特别是在 Reflect 等方法中,提示中还会包含额外的信息。同样值得注意的是,不同的方法在某些 LLM 中比在其他 LLM 中效果更好,例如 React 在 OpenChat-3.2 中的平均表现比 FS 差,而 React 和 FS 在 GPT-3.5 中的平均收益表现类似。whaosoft

wait_event_interruptible() 和 wake_up()的使用_wait_event_interruptible函数没有返回-程序员宅基地

文章浏览阅读571次。http://www.newsmth.net/nForum/#!article/KernelTech/20731 1. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedu_wait_event_interruptible函数没有返回

随便推点

Ubuntu 应用之 截图工具-flameshot_ububtu用libreoffice截图-程序员宅基地

文章浏览阅读707次,点赞4次,收藏3次。Ubuntu 18自带有截图工具,但是使用方式以及使用功能都不是很理想。还好在GitHub上有flameshot这么一款强大的linux截图工具。下载地址:https://github.com/flameshot-org/flameshot直接下载“Download zip”安装方式:下载后打开终端,具体安装命令如下:sudo apt-get install flameshot启动后,长成这个样子,每一个紫色小圈圈都代表一个功能, 是不是很强大如果觉得每次启动不方._ububtu用libreoffice截图

解决“ ModuleNotFoundError: No module named ‘tensorflow.examples‘ “_modulenotfounderror: no module named 'tensorflow.e-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏31次。这个问题是我在用tensorflow做mnist数据集案例,程序在pycharm 2019.3.1运行时出现的问题.原因是tensorflow中没有examples解决方法首先找到对应tensorflow的文件,我的是在D:\python3\Lib\site-packages\tensorflow(python的安装目录),进入tensorflow文件夹,发现没有examples文件夹。我们可以进入github下载:https://github.com/tensorflow/tensorflow_modulenotfounderror: no module named 'tensorflow.examples

【转】在ubuntu12.04中安装wine和sourceinsight-程序员宅基地

文章浏览阅读46次。PS:用wine其实还可以在Linux下运行其他Windows软件,比如BeyondCompare,过程是一样的原文网址:http://www.2cto.com/os/201408/322370.html1.安装winesudo apt-get install wine2.安装source insight将source insight安装的可执行文件复制到ubuntu...

Javascript初级教程(适合新手)_js入门教程-程序员宅基地

文章浏览阅读1.7k次。1)定义变量的三要素 :var 变量名 = 初始化值;2)定义所有的变量都是var,而且var可以省略不写!3)js中,变量可以重复定义的,后面的值将前面的值覆盖!在js中定义函数的格式function 函数名(参数名1,参数名2,....){完成的函数的逻辑return 结果;//返回结果调用函数:赋值调用:var 变量名= 函数名(实际参数1,实际参数2..)以下为简单的函数实例var m = prompt("请输入一个数")_js入门教程

GTC 2024 火线评论:DPU 重构文件存储访问_dpu分布式存储-程序员宅基地

文章浏览阅读874次,点赞11次,收藏9次。在多样化的 GPU 存储类型的利用上,不管是块存储的 NVMe 卷作为节点内的高速缓存,还是共享文件存储作为 CPU/GPU 内存的全局缓存存储,最终通过基于对象存储的数据湖来统一治理,这些存储类型的需求和定位都跟 XSKY 的产品定位和路线图高度符合。对于国内领先的分布式存储厂商来说,我们同样认为,不仅是 Nvidia BlueField 系列产品可以提供这样的方式,这样的需求应该可以在普遍的 DPU 产品中实现并被利用,有效的提高 DPU 在存储协议上的多样化支持,并带来共享文件存储的安全性所需。_dpu分布式存储

flex两列布局,左边固定(可折叠),右边自适应_实现左侧展开折叠右侧自适应-程序员宅基地

文章浏览阅读9.7k次,点赞2次,收藏8次。需求:左边导航栏固定宽200px,并且导航栏可折叠隐藏,右边自适应,填充剩余的宽度. html:&amp;lt;div class=&quot;body&quot;&amp;gt; &amp;lt;div class=&quot;sidebar&quot;&amp;gt; &amp;lt;div class=&quot;bar&quot; id='bar'&amp;g_实现左侧展开折叠右侧自适应

推荐文章

热门文章

相关标签