位置: 编程技术 - 正文

Node.js实现的简易网页抓取功能示例(node.js怎么样)

编辑:rootadmin

推荐整理分享Node.js实现的简易网页抓取功能示例(node.js怎么样),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js gui,nodejs实战教程,node.js用途,node.js用途,node.js介绍,node js教程,node.js javascript,node.js介绍,内容如对您有帮助,希望把文章链接给更多的朋友!

现今,网页抓取已经是一种人所共知的技术了,然而依然存在着诸多复杂性, 简单的网页爬虫依然难以胜任Ajax轮训、XMLHttpRequest,WebSockets,Flash Sockets等各种复杂技术所开发出来的现代化网站。

我们以我们在Hubdoc这个项目上的基础需求为例,在这个项目中,我们从银行,公共事业和信用卡公司的网站上抓取帐单金额,到期日期,账户号码,以及最重要的:近期账单的pdf。对于这个项目,我一开始采用了很简单的方案(暂时并没有使用我们正在评估的昂贵的商业化产品)——我以前在MessageLab/Symantec使用Perl做过的一个简单的爬虫项目。但是结果很不顺利,垃圾邮件发送者所制作的网站要比银行和公共事业公司的网站简单的多得多。

那么如何解决这个问题呢?我们主要从使用Mikea开发的优秀 request库开始。在浏览器中发出请求,并在Network窗口中查看到底发送出去了什么请求头,然后把这些请求头拷贝到代码里。这个过程很简单。仅仅是跟踪从登陆开始,到下载Pdf文件结束的这个过程,然后模拟这个过程的所有的请求而已。为了使类似的事情处理起来变得容易,并且能让网络开发者们更加合理地写爬虫程序,我把从HTML上取到结果的方把导出到jQuery中(使用轻量级 cheerio库),这使得相似的工作变得简单,也使利用CSS选择子选取一个页面中的元素变得较为简单。整个过程被包装进一个框架,而这个框架也可以做额外的工作,例如从数据库中拾取证书,加载个体机器人,和UI通过socket.io沟通。

对于一些web站点来说这个是有效的,但这仅仅是JS脚本,而不是我那个被这些公司放在他们站点上的node.js的code。他们对遗留下来的问题,针对复杂性就行分层,使得你非常难去弄明白该做什么来得到登录的信息点。对于一些站点我尝试了几天通过与request()库结合来获取,但仍是徒然。

在几近崩溃后,我发现了node-phantomjs,这个库可以让我从node中控制phantomjs headless webkit浏览器(译者注:这个我没想到一个对应的名词,headless这里的意思是渲染页面在后台完成,无需显示设备)。这看起来是一种简单的解决方案,但是还有一些phantomjs无法回避的问题需要解决:

1.PhantomJS只能告诉你页面是否完成了加载,但是你无法确定这个过程中是否存在通过JavaScript或者meta标签实现的重定向(redirect)。特别是JavaScript使用setTimeout()来延迟调用的时候。

2.PhantomJS为你提供了一个页面加载开始(pageLoadStarted)的钩子,允许你处理上面提到的问题,但是这个机能只能在你确定要加载的页面数,在每个页面加载完成时减少这个数字,并且为可能的超时提供处理(因为这种事情并不总是会发生),这样当你的数字减少为0,就可以调用你的回调函数了。这种方式可以工作,但是总让人觉得有点像是黑客手段。

Node.js实现的简易网页抓取功能示例(node.js怎么样)

3.PhantomJS每抓取一个页面需要一个完整独立的进程,因为如果不这样,无法分离每个页面之间的cookies。如果你是用同一个phantomjs进程,已经登录的页面中的session会被发送到另一个页面中。

4.无法使用PhantomJS下载资源 - 你只能将页面保存为png或者pdf。这很有用,但是这意味着我们需要求助于request()来下载pdf。

5.由于上述的原因,我必须找到一个方法来将cookie从PhantomJS的session中分发到request()的session库中去。只需要将document.cookie的字符串分发过去,解析它,然后将其注入到request()的cookie jar中去。

6.将变量注入到浏览器session中并不是件容易的事情。要这么做我需要创建一个字符串来建立一个Javascript函数。7.一些网站总是充斥着console.log()之类的代码,也需要将他们重新定义,输出到我们希望的位置。为了完成这个,我这么做:

8.一些网站总是充斥着console.log()之类的代码,也需要将他们重新定义,输出到我们希望的位置。为了完成这个,我这么做:9.告诉浏览器我点击了a标签也是件很不容易的事情,为了完成这些事情,我加入了以下的代码:

.我还需要限制浏览器session的最大并发量,从而保障我们不会爆掉服务器。虽然这么说,可是这个限制要比昂贵的商业解决方案所能提供的高很多。(译者注:即商业解决方案的并发量比这个解决方案大)

所有的工作结束后,我就有一个比较体面的 PhantomJS + request 的爬虫解决方案。必须使用 PhantomJS 登录后才可以返回去 request() 请求,它将使用在 PhantomJS 中设置的 Cookie 来验证登录的会话。这是一个巨大的胜利,因为我们可以使用 request() 的流来下载 pdf文件。

整个的计划就是为了让 Web 开发者相对容易的理解如何使用 jQuery 和 CSS 选择器来创建不同 Web 网站的爬虫,我还没有成功证明这个思路可行,但相信很快会了。

node.js实现BigPipe详解 BigPipe是Facebook开发的优化网页加载速度的技术。网上几乎没有用node.js实现的文章,实际上,不止于node.js,BigPipe用其他语言的实现在网上都很少见。以

node.js中实现同步操作的3种实现方法 众所周知,异步是得天独厚的特点和优势,但同时在程序中同步的需求(比如控制程序的执行顺序为:func1-func2-func3)也是很常见的。本文就是对这个问

node.js中RPC(远程过程调用)的实现原理介绍 刚接触到RPC(远程过程调用),就是可以在本地调用远程机子上的程序的方法,看到一个简单的nodejs实现,用来学习RPC的原理很不错:nodejslight_rpc使用

标签: node.js怎么样

本文链接地址:https://www.jiuchutong.com/biancheng/374265.html 转载请保留说明!

上一篇:Node.js中安全调用系统命令的方法(避免注入安全漏洞)(node.js安装模式选择)

下一篇:node.js实现BigPipe详解(nodejs bff)

  • 法律会计审计咨询合同需要缴纳印花税吗
  • 小规模忘了报税怎么办
  • 小规模30万免增值税1点怎么申报税款
  • 累进税率的形式有全额累进税率和什么两种
  • 原始凭证填写过程
  • 汇算清缴时发现去年的成本少确认了报表怎么填列
  • 租车开发票属于什么类
  • 不动产销售额怎么填
  • 辞退员工补偿的月平均工资如何计算
  • 销售商品发生的运费计入什么科目
  • 采购折扣怎么结转成本?
  • 增值税专票过了3年能抵扣吗
  • 资质挂靠人员需要交个税吗?
  • 营改增后小规模纳税人税率是多少
  • 提供境外服务
  • 为什么发票查验不出
  • 高新技术企业注销后退回补贴
  • 电子承兑都是银行承兑吗
  • 固定资产清理销项税
  • 店面转让出去收到的钱如何做账?
  • 委托贷款利息收入需要缴纳增值税么
  • 计提税金及附加怎么算
  • 公司买的理财产品怎么做账
  • 期初银行余额有误怎么调分录怎么写
  • php中的函数可以分为哪几种
  • 会计实务加班费的账务处理
  • 分公司吸收新股怎么办
  • 差旅费涉及的科目
  • 什么食物含胆固醇高不能吃
  • 深度学习&故障诊断初学者 - 学习路线
  • php实现文件上传需要使用哪个全局变量
  • 公司未成立,发起人的责任
  • 递延所得税资产和递延所得税负债
  • vuex使用步骤
  • php和mysql关系
  • web核心的三个标准
  • php调用java接口
  • 广告费成本包括哪些内容
  • 应付职工薪酬总账和明细账
  • 注册资本为
  • inner join用法示例
  • 账务处理相关内容
  • 应收票据贴现的影响因素
  • 查看db2状态
  • 通货膨胀溢价的英文
  • 环境检测费可以计入环保费吗
  • 暂估入库账务处理举例
  • 以前年度多计收入今年怎么调整
  • 留抵抵欠税附加税需要交嘛
  • 车险代买的出了事故怎么办
  • 增值税专用发票怎么开
  • 收到政府的资本公积可以投入子公司吗
  • 合同法有什么规定
  • 营改增后房租发票可以抵扣吗
  • 员工还款还公司会计分录
  • 税收返还会计核算
  • 长期待摊费用的最新账务处理
  • 给公司股东分红的账务处理
  • 对公账户如何转钱进去
  • mysql导出语句
  • mac截图清晰度设置方法
  • 硬盘uefi启动安装系统
  • windows预览版和正式版区别
  • 怎么在mac上看电视剧
  • 手把手教您安装软件
  • centos时间不同步的解决方法(centos时间同步)
  • win10扫雷在哪打开
  • cocos2dx-js
  • android打包v1v2
  • html模板 js
  • 网页字体大小调整方案
  • HTTP 304错误的详细讲解
  • python函数例子
  • cmd新建
  • shell脚本自动化
  • js判断iframe是否加载完成
  • python集合的基本操作
  • 福建省国税局领导班子介绍
  • 契税和房产税是一回事吗
  • 怎么登录吉林省公务员网络培训学院
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设