Blog | Phodal - A Growth Engineerhttp://www.phodal.com/blog/2015-03-31T09:44:29.686648+00:00Blog jsdom 用node解析html2014-11-20T13:46:53+00:002015-03-31T09:44:29.686648+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/use-jsdom-parse-html/再次用Nodejs构建一个API,这时需要去parse html,找了很久没有找到一个好的库,这时看到了jsdom——关键是可以用jQuery。
##jsdom
> A JavaScript implementation of the WHATWG DOM and HTML standards.
###install
$ npm install jsdom
###示例
官网给了下面的一个例子:
var jsdom = require("jsdom");
jsdom.env(
"http://nodejs.org/dist/",
["http://code.jquery.com/jquery.js"],
function (errors, window) {
console.log("there have been", window.$("a").length, "nodejs releases!");
}
);
###实战
这里的jquery还需要去下载,感觉会消耗一定的时间,于是参考了官网的例子,用了本地的文件,自己的代码大致如下:
jsdom.env({
url: "http://example.com/" + name,
src: [jquery],
done: function (errors, window) {
var $ = window.$;
var result = [];
csdn_support.prototype.add_blog_info($, result);
csdn_support.prototype.add_blog_category($, result);
csdn_support.prototype.add_articles($, result);
callback(result);
}
});
这样我们就可以去获取我们想要的结果。
问题是上面的库,就是调用了jQuery去解析HTML,大概就是因为node没有UI?
##jsdom信赖库
于是看了看jsdom的依赖库
- browser-request : Browser port of the Node.js 'request' package
- contextify: Turn an object into a persistent execution context.
- cssstyle: CSS StyleDeclaration Object Model implementation
- htmlparser2: Fast & forgiving HTML/XML/RSS parser
- nwmatcher: A CSS3-compliant JavaScript selector engine.
- parse5: WHATWG HTML5 specification-compliant, fast and ready for production HTML parsing/serialization toolset for Node.
- request: Simplified HTTP request client.
- xmlhttprequest: XMLHttpRequest for Node
- browser-request: Browser port of the Node.js 'request' package
###原理
html 转 pdf,用wkhtmltopdf将html转pdf2014-04-24T13:58:38+00:002014-05-13T15:29:16.848038+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/convert-html-to-pdf-use-wkhtmltopdf/> 有的时候想把HTML转成PDF, 方便用户下载离线使用或阅读。但并不是每个人都会制作PDF文档,幸好,有太多的PDF相关工具。
这些话不是我写的,但是我想说的是我们需要这样一个工具,在那之前我还试着转tex转html,但是失败了。
##tex html
可以直接用这样一个命令来执行
$htlatex file.tex
但是遗憾的是会报错,还有
$tex4ht file.tex
但是依然不行,只好手动写Html,然后再转为pdf
htlatex filename # generate HTML
xhlatex filename # generate XHTML
如果装有``tex``的话会是一个很好的选择,问题是似乎。。
##html转pdf
###html2pdf
> wkhtmltopdf and wkhtmltoimage are open source (LGPL) command line tools to render HTML into PDF and various image formats using the QT Webkit rendering engine. These run entirely "headless" and do not require a display or display service.
wkhtmltopdf和wkhtmltoimage是用于渲染html成pdf和图片格式的开源的命令行工具,使用的是QT Webkit。
###html 转 pdf 网页
使用官方的示例
$wkhtmltopdf http://google.com google.pdf
便可以将谷歌的首页转为pdf
当然我们也可以用
$wkhtmltopdf index.html index.pdf
将index.html转为index.pdf。
###安装wkhtmltopdf
可以直接到
[http://wkhtmltopdf.org/downloads.html](http://wkhtmltopdf.org/downloads.html)下载
对于没有的Mac OS可以用
gem install wkhtmltopdf-binary
没有``brew install``也没有``port``
sudo port install wkhtmltopdf
Password:
Error: Port wkhtmltopdf not foundruby nokogiri ruby解析HTML2014-03-29T02:39:33+00:002014-05-14T01:37:44.038705+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/ruby-parse-html-use-ruby-nokogiri/这里是用到了nokogiri库,从某HTML里读出内容。不过有意思的是,当我们加上一些特定功能的时候就可以当一个爬虫到处搜索资料了。
##Ruby Nokogiri##
安装nokogiri,大家都懂的
gem install nokogiri
##Ruby解析HTML##
我们想要的是从
phodal <!--more--> [caption id="attachment_23" align="alignnone" width="240"]<a href="http://www.phodal.com/logo.png"><img alt="CSDN" class="size-full wp-image-23" height="90" src="http://www.phodal.com/logo.png" width="240"/></a>
这段HTML中解析出里面的img标签,于是
require 'nokogiri'
doc = Nokogiri::HTML('phodal <!--more--> [caption id="attachment_23" align="alignnone" width="240"]<a href="http://www.phodal.com/logo.png"><img alt="CSDN" class="size-full wp-image-23" height="90" src="http://www.phodal.com/logo.png" width="240"/></a>')
p doc.css('img').first['src']
于是这就是一个简单的示例,如果我们还想从某个网页中抓取我们需要的内容。
<pre><code class="ruby">
require 'rubygems'
require 'nokogiri'
require 'open-uri'
page = Nokogiri::HTML(open("http://www.phodal.com/"))
puts page.css('img').first['src']
</code></pre>
用于抓取本网站的第一个带有src的img标签,换句话说就是图片的来源。
而这里是用于解析上一篇中说到的[wordpress 微信][0]
[0]:http://www.phodal.com/blog/wordress-wechat-to-build-a-blog-wechat/
<pre><code class="ruby">
require 'json'
require 'net/http'
require 'nokogiri'
post_id = 1
image_response = Net::HTTP.get_response("localhost","/?wpapi=get_posts&dev=1&comment=1&content=1&id="+post_id)
image_response_content = (JSON.parse image_response.body)['posts'][0]['content']
image_req = Nokogiri::HTML(image_response_content).css('img').first['src']
</code></pre>
互联网时代与大学生创业2012-11-26T21:40:49+00:002014-05-16T18:58:13.462699+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/Internet%2520and%2520university%2520students%2520'%2520innovative%2520undertaking/<p> “There's something interesting happening right now. Startups are undergoing the same transformation that technology does when it becomes cheaper.”</p>
<p>(眼下有一件有趣的事情正在发生。初创公司正在经历着一种转变,它很像发生在成本降低时期的技术转变)</p>
<p>——Paul Graham</p>
<p>(注:Paul Graham:Justin tv,YCombinator和Kiko创始人,都为互联网项目。)</p>
<p> </p>
<p>创业是艰难的,许多人因此而选择逃避这种事。但是,我们也明白一份早出晚归的工作也是如此的,从某种意义上来说,甚至比创业还艰辛。但是,当你开一家属于自己的公司时,虽然你会因为诸多事情而忧虑麻烦,但是你会因此而感受到生命的精彩。当你在一家大公司工作的时候,也常会有此。唯一的区别是,创业可能会让你赚越来越多的钱。</p>
<p> </p>
<p>一、创业的基础条件</p>
<p>创业的基础条件是什么?</p>
<p>通常来讲,一次成功的创业由三个基本条件组成:优秀的合伙人,有市场前景的产品(或者说,它是被需要的),还有呢,money(尽可能少的启动资金)。</p>
<p>“是的,这是创业的基础条件。”如果,我们能完全具备这三点去创业时,我们将有很大的可能性去取得成功。</p>
<p>然而,这一切正在转变,我们已经不是第一次听见或看见的,因为这是技术领域。高科技产业往往用几年时间就积累大量的财富,而且这些财富往往大于传统产业几十年所积累的,这就是高科技产业的魅力所在。而且,在这领域里面技术及产品的更新是极快的,以CPU为例,18个月是一个周期,CPU速度加快一倍,而价格将减少一半。如果用这种角度来看待今天,已经不知道是过去的第几个18个月后……,创业在过去是昂贵的,你必须云寻找投资人才能创业,而今天这些已经变得十分低廉。</p>
<p>第一次工业革命的创业,也就是蒸汽时代是由资本主导的世界,资本在社会生产中取着决定的因素,科学对工业没什么影响。第二次工业革命,人类开始进入电气时代,科学开始起了更加重要的作用,资本已经不再是决定性因素。现在最大的公司埃克森·美孚也就是这个时代诞生的,其创始人洛克菲勒是白手起家的。第三次工业革命——</p>
<p>二、信息时代的创业条件</p>
<p>It's so cheap to start web startups that orders of magnitudes more will be started. If the pattern holds true, that should cause dramatic changes.</p>
<p>(因为互联网创业的成本如此之低,所以初创企业的数目将呈指数式增长。)</p>
<p align="center">什么是Internet?</p>
<p>Internet是计算机交互网络的简称。它是利用通信设备和线路将全世界上不同地理位置的功能相对独立的数以千万计的计算机系统互连起来,以功能完善的网络软件实现网络资源共享和信息交换的数据通信网。</p>
<p align="center">谁是互联网时代最大的赢家?</p>
<p>看看谁是现在最大的互联网公司——Google,Google搜索项目是由两名斯坦福大学的理学博士生拉里·佩奇和谢尔盖·布林在1996年早期建立的。谷歌公司是在哪里诞生的,车库。同样的还有市值最大的IT公司苹果,最大的PC制造商惠普,第二大PC制造商戴尔,及最大的视频网站Youtube。他们的共同点是什么?一个车库,而不是一个办公室,或者其它什么的。</p>
<p align="center">我们需要至少多少合伙人?</p>
<p>苹果公司是由乔布斯,沃兹和韦恩三个人成立的,HP(惠普)公司的创始人是<a href="http://zh.wikipedia.org/wiki/%E5%A8%81%E5%BB%89%C2%B7%E4%BC%91%E5%88%A9%E7%89%B9">威廉</a><a href="http://zh.wikipedia.org/wiki/%E5%A8%81%E5%BB%89%C2%B7%E4%BC%91%E5%88%A9%E7%89%B9">·</a><a href="http://zh.wikipedia.org/wiki/%E5%A8%81%E5%BB%89%C2%B7%E4%BC%91%E5%88%A9%E7%89%B9">休利特</a>及<a href="http://zh.wikipedia.org/w/index.php?title=%E5%A4%A7%E5%8D%AB%C2%B7%E5%B8%95%E5%8D%A1%E5%BE%B7&action=edit&redlink=1">大卫</a><a href="http://zh.wikipedia.org/w/index.php?title=%E5%A4%A7%E5%8D%AB%C2%B7%E5%B8%95%E5%8D%A1%E5%BE%B7&action=edit&redlink=1">·</a><a href="http://zh.wikipedia.org/w/index.php?title=%E5%A4%A7%E5%8D%AB%C2%B7%E5%B8%95%E5%8D%A1%E5%BE%B7&action=edit&redlink=1">帕卡德</a>,DELL(戴尔)公司的创始人是迈克尔·戴尔一个人。大多数新公司是从高科技领域开始的,电脑行业成其如此。戴尔所在的时代,有几家公司呢?IBM、AT&T还有苹果电脑这几家公司在控制大局,然而,这机遇还是产生了,让一位资金不足的戴尔把握住了,最终与之抗衡。他当时借了多少钱成立的戴尔公司呢?30万美元。</p>
<p align="center">“车库,这种东西我们还没有?”</p>
<p>Facebook的创始人是Mark Zuckerberg,Facebook是全球最大社交网站。它可不是诞生于某个仓库,而是哈佛大学。哈佛,全球最好的大学。不过,不是这家学校诞生的,而是Zuckerberg的宿舍,在热映的《社交网络》中,我们可以知道这家公司的许多事情。</p>
<p align="center">它需要的东西有多少?</p>
<p>一台电脑还有一台服务器,这是在04年时候的创业成本。而且,服务器是租的。而facebook用的是什么?</p>
<p>PHP(Personal Home Page)语言 ,一种电脑上执行的脚本语言,主要用途是在处理动态网页,也包含命令列执行接口(Command line interface)。互联网把这些成本都低价的打包了,关于PHP唯一需要花钱的地方就是学习语言所需的成本。在电脑的硬件上我们需要什么,一台能上网的计算机。GNU/LINUX是免费的,而且有更为强大的编程功能。因而,我们所需要支付的是计算机的成本费用。同时,因为我们只需要能进行简单文本编辑和上网功能的系统。</p>
<p align="center">云计算时代。</p>
<p>文本编辑器、编译器、连接器等等这些软件装在个人计算机上将成为一个巨大的负担,因此我们不得不承受巨大的计算机硬件费用。</p>
<p>云计算的核心思想,是将大量用网络连接的计算机资源统一管理和高度,构成一个计算资源池向用户按需服务。也就是说,我们所需要的一切都在网上有。我们需要一个服务器,他是免费的,Google的GAE(Google App Engine)。一个文本编辑器,还是可以通过谷歌的服务。而且这一切有较高的安全性。我们将自己的数据保存在网络的数据存储中心,我们不再需要担心自愧代码、数据丢失,也不用担心、病毒入侵。我们需要的是一台能上网的电脑。</p>
<p align="center">移动终端。</p>
<p>移动终端或者叫移动通信终端是指可以在移动中使用的计算机设备,广义的讲包括手机、笔记本、POS机甚至包括车载电脑,大部分情况下是指手机或者具有多种应用功能的智能手机。我们需要编程是的,我们只需要有一个文本编辑器,我们可以通过更具移动的设备——手机。同时,你的编程语言的编程平台也可以在手机上实现,如Python(注:是一种面向对象、直译式计算机程序设计语言),我们需要的是一台能上网的智能终端仅此而已。</p>
<p> </p>
<p>三、大学生还有创业</p>
<p>与国外环境相同的是,一群将要毕业的大学生都将遇到就业难问题,而不同的是。更多的在这个时候选择了更高的学历,而国外选择的是创业。例如,为了解压英国的就业压力,2004年9月,英国政府设立了英国大学生创业促进委员会,旨在促进英国高等学校加强对大学生企业家资质的培养,尤其是鼓励毕业生的自我创业。从意识上,两国的大学生在这方面就有所不同。</p>
<p>Instead, I want to give hope to any underclassmen here today. I say to you, and I can't stress this enough: leave. Pack your things and your ideas and don't come back. Drop out. Start up.</p>
<p>(事实上,我是寄希望于眼下还没有毕业的同学。我要对他们说,离开这里。收拾好你的东西,带着你的点子,别再回来。退学吧,开始行动。)</p>
<p>——Larry Ellision</p>
<p>(Larry Ellision:美国第三富豪,世界第二大软件公司oracle的总裁)</p>
<p>这句话是来自于埃里森在Yale University(耶鲁大学)的演讲(注:最后这位CEO被赶下讲台。)谁是这个时代最出名的辍学生,毫无疑问——比尔·盖茨。并非鼓励大学生都辍学,但是上述的几个人都是如此。</p>
<p>创业并不需要优秀的创意,他不需要特别出众的才华才能踏出的。马云创办淘宝的时候这是个例子,他在当时只是一个中学老师。创业的成功与否在于它是否能向人们提供一种比他拥有的东西更好一点的商品或者服务。而这些东西是生活中处处可见的。比如,一个叫吉列的人因为刮胡须被乱出血,于是便发明了剃须刀。就有了现在著名的吉列品牌。我们许多的衣服上的拉链也是由人们对于服装的不满意而发明出来的等等。</p>
<p>在这的同时,我们只需要把自己的创意加以改进,在创业过程中将此转变为收益。我们需要的是在实践中对原始计划不断思考和修正。因此,在整个过程中,人处着主导的优势。只有一个能思考的人才能将此转为商品或者服务。</p>
<p>学校是一个创业发起的绝佳场所,因为这里聚焦着一批才华横溢的人,都是有才智的人,所以我们可以发现创业多大是发生在大学周围。当然了,创业不是一个人的事,虽然一个人可以创业,单独创业者,会发现自己面临着巨大的精神压力。在学校我们该做的是专注于自己的项目,即使我们没有选择走上创业这条路,我们也能因此而成为一名优秀的职员。通常来讲,大部分的创业活动开始都是由同伴或者一群好朋友,以facebook为例,招聘员工的行为也是依靠于朋友进行的。因此,理想状态下,我们需要2至4个合作者。当然,创业初期不需要太多人,过多的人容易导致分歧的产生,因而导致项目的失败。而这个在校园里面是十分理想的环境,很容易可以找到一批与你志同道合的人,例如,了解什么是HTML,什么是CSS,而不必在复杂的社会环境中。同时,又是拥有着相同的兴趣和爱好。</p>
<p>When starting a startup was expensive, you had to get the permission of investors to do it. Now the only threshold is courage.</p>
<p>(以前创业很昂贵,你不得不找到投资人才能创业。而现在,唯一的门槛就是勇气。)</p>
<p>——Paul Graham</p>
<p>创业需要的最后一个门槛就是勇气,创业是件冒险的事情。在这个时候,可能几乎没有时间做工作以外的事情。因为即使休息的时候,你的竞争者们也在前进。创业就是创造一些人们会喜欢使用的东西,然后尽量节省开支保证有钱赚,仅此而已。</p>