Articles of htmlparsing

正则expression式不匹配具有属性的标签?

================================================== ======================= 编辑:我使用node.js,所以我没有访问的DOM,parsing与HTMLparsing器不是一个选项(这是不够有效,足以certificate通过这么less的文本传递) ================================================== ======================= 首先,我知道。 HTML +正则expression式=失败。 不过,我只需要它删除所有具有属性的标签。 以下是我到目前为止: exports.strip_tags = function(input, allowed) { // Strips HTML and PHP tags from a string allowed = (((allowed || "") + "") .toLowerCase() .match(/<[az][a-z0-9]*>/g) || []) .join(''); var tags = /<\/?([az][a-z0-9]*)\b[^>]>/gi, commentsAndPhpTags = /<!–[\s\S]*?–>|<\?(?:php)?[\s\S]*?\?>/gi; return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){ return allowed.indexOf('<' + $1.toLowerCase() + '>') > […]

如何在浏览器中抑制javascript错误?

我手上有一个棘手的小问题,可能会把我的工作放到最后一个星期。 我试图从url中取消一个网页,并显示在我的浏览器中,除了javascript的网页。 我的抓取发生在nodejs我的程序stream程是: 从url获取HTML页面到我的服务器。 使用htmlparser2获取所有的CSS和图像链接(不是JavaScript链接) parsingCSS来检查任何外部链接(例如图片URL,CSS导入链接等) 下载这些新的资源,并重复步骤3和4,直到所有资源下载。 从HTML页面中删除所有脚本标记(我使用简单的string操作来完成)。 添加我自己的单个脚本标记,链接到我使用Google Closure编译的JavaScript(它使用canvas添加了一种复杂的dynamic重叠)到HTML。 在浏览器中打开下载的HTML的URL,从我的服务器提供页面。 该页面在浏览器中打开,但是从我的服务器提供,我的JavaScript运行,并显示最终结果。 但是我在第八步遇到了一个问题。 我已经从HTML页面中删除了所有脚本标签,但是有些页面使用onload , onclick等属性从HTML本身调用javascript函数。 例如: <body onload="xxx()">….</body> 这样的页面会引发一个Uncaught ReferenceError: xxx is not defined在我的浏览器中Uncaught ReferenceError: xxx is not defined 。 某些浏览器(如Google Chrome)在控制台中logging此错误,但不会停止执行,所以我的JavaScript运行没有任何问题。 但是某些浏览器,如Firefox,Opera和IE(我相信会有更多的)停止执行并进入debugging模式,我的JavaScript永远不会运行。 我想从我的服务器上的HTML删除所有这些属性,但后来我发现了所有这些属性的列表,并决定反对它的性能的原因,因为它的一长串(我仍然打开它,如果我能find一个有效的方式做这个)。 我正在寻找一种方法来处理可能出现在我的HTML由于undefined references ,然后压制他们的所有JavaScript错误。 我可以捕捉错误使用: window.onerror = function(msg, url, line, col, error) { alert(msg); } 但是,我可以做一些事情,当Uncaught ReferenceError错误发生时不打破执行stream程? 基本上,有没有办法在JavaScript中捕捉和处理ReferenceError ? 感谢提前!

如何分割string而不创build格式不正确的HTML标签?

我在做什么 : 在NodeJS中,我使用MustacheJS创build一个电子邮件模板,使用JSON对象数组中的数据。 模板中的文本/消息可以包含基本的html标签(例如b p & a )。 由于空间的限制,我只需要显示消息摘录。 为此,我做了一个字数,然后让我们说20个字(空格检查)我截断string,并追加View more锚点标记。 这将其链接到网站的post页面,其中包含完整的post。 就像是: 嘿,这是一个示例文章<b>message</b> 。 Lorem ipsum dolor sit amit … <a href="someurl">查看更多</a> 问题: 在字数和截断期间,我可能会截断html标签之间的string,因为我只是根据空间计算单词。 就像是: 我正在与你分享链接。 <a style="color: … <a style="color:查看更多</a> 现在这将打破HTML。 可能的scheme 在截断string之前,运行一个正则expression式来查找其中的所有html标签。 使用indexOf() (或其他方法)来查找每个标签的起始和结束索引。 在字数后,得到我需要截断它的索引。 现在看到,如果索引与任何标签区域相交。 如果相交,只需将截断索引移动到html标记的开头或结尾。 题: 有一个更好的方法吗。 我不知道我应该search谷歌search条件,以获得帮助。 PS代码是灵活的,我可以改变stream程,如果有一个更好的解决scheme。 另外,我对post的标题不太好。 如果可以,请修改它以反映问题。 编辑: 这是Alex在回答之后提出的。 希望它可以帮助别人: /** * Counter: Takes a string […]

用node.jsparsing奇怪的html

我试图parsing一个网站,但HTML是一团糟。 任何人有更多的parsing网站的经验帮助我? <tr> <td><font FACE=Tahoma color='#CC0000' size=2><b>Date</b></font></td> <td><font FACE=Tahoma color='#CC0000' size=2><b>Place</b></font></td> <td><font FACE=Tahoma color='#CC0000' size=2><b>Situation</b></font></td> </tr> <tr><td rowspan=2>16/09/2011 10:11</td><td>New York</td><td><FONT COLOR="000000">Situation Red</font></td></tr> <tr><td colspan=2>Optional comment hello new york</td></tr> <tr><td rowspan=2>16/09/2011 10:08</td><td>Texas</td><td><FONT COLOR="000000">Situation Green</font></td></tr> <tr><td colspan=2>Optional comment hello texas </td></tr> <tr><td rowspan=1>06/09/2011 13:14</td><td>California</td><td><FONT COLOR="000000">Yellow Situation</font></td></tr> </TABLE> 一个奇怪而疯狂的事情是评论不在桌子的头顶也是起点(加州)没有评论。 所以,起点总是会是这样的: date:06/09/2011 13:14 地点:加州 情况:黄色情况 评论:null 所有其他地方都有评论,并将是这样的: date:16/09/2011 10:11 […]

Node.js和Cheerio分析表与select器

我试图parsing一个HTML表,使用Node.js和Cheerio,我得到了一些结果,但不幸的是我得到太多的数据,我不知道如何parsing它进一步得到只有我需要的数据。 这是我到目前为止的一小段代码。 var request = require("request"); var cheerio = require("cheerio"); request('http://www.myURL.com', function(error, response, body) { var $ = cheerio.load(body); $('td').each(function() { console.log($(this).text()); }); }); 使用Chrome插件findselect器,我发现我需要“.clickableRow TD”,但是我试图插入这个插件的每一种方式似乎都不起作用。 为了更清楚一点,HTML源代码看起来像这样 – <html> <body> <form> <table> <tbody> <td> <table class="standardTable"> <tbody> <tr class="clickableRow"> <td>first thing I want</td> <td>second thing I want</td> <td>third thing I want</td> <td>fourth thing I want</td> […]

parsingHTML并保留原始内容

我有很多的HTML文件。 我想replace一些元素,保持所有其他内容不变。 例如,我想执行这个jQueryexpression式(或者它的一些等价物): $('.header .title').text('my new content') 在以下HTML文件上: <div class=header><span class=title>Foo</span></div> <p>1<p>2 <table><tr><td>1</td></tr></table> 并有以下结果: <div class=header><span class=title>my new content</span></div> <p>1<p>2 <table><tr><td>1</td></tr></table> 问题是,我尝试过的所有parsing器( Nokogiri , BeautifulSoup , html5lib )将其序列化为如下所示: <html> <head></head> <body> <div class=header><span class=title>my new content</span></div> <p>1</p><p>2</p> <table><tbody><tr><td>1</td></tr></tbody></table> </body> </html> 例如他们增加: HTML,头部和身体的元素 closuresp标签 TBODY 有一个parsing器可以满足我的需求吗? 它应该在Node.js,Ruby或Python中工作。

如何使用Node.jsparsingHTML页面

我需要parsing(服务器端)大量的HTML页面。 我们都同意,正则expression式不是去这里的路。 在我看来,JavaScript是parsingHTML页面的本地方式,但是这个假设依赖于服务器端代码具有浏览器内部的所有DOM能力。 Node.js是否具有内置的能力? 有没有更好的方法解决这个问题,在服务器端parsingHTML?