标签: html-parsing

如果HTML解析不使用正则表达式,它们如何工作?

我每天都会看到问题,询问如何从某些HTML字符串中解析或提取某些内容,第一个答案/注释始终是"不要使用RegEx解析HTML,以免感到愤怒!" (有时省略最后一部分).

这对我来说相当混乱,我一直认为,解析任何复杂字符串的最佳方法是使用正则表达式.那么HTML解析器如何工作呢?它不使用正则表达式来解析.

使用正则表达式的一个特殊参数是,并不总是有一种解析替代方法(例如JavaScript,其中DOMDocument不是普遍可用的选项).例如,jQuery似乎可以使用正则表达式将HTML字符串转换为DOM节点.

不知道是否CW这个,这是一个真正的问题,我想要回答,而不是真正想成为一个讨论主题.

html regex parsing html-parsing

96
推荐指数
4
解决办法
5997
查看次数

如何使用Node.js解析HTML页面

我需要解析(服务器端)大量的HTML页面.
我们都同意regexp不是这里的方式.
在我看来,javascript是解析HTML页面的本地方式,但该假设依赖于具有javascript在浏览器中具有的所有DOM能力的服务器端代码.

Node.js内置了这种能力吗?
有没有更好的方法解决这个问题,解析服务器端的HTML?

server-side html-parsing node.js

88
推荐指数
5
解决办法
11万
查看次数

如何在JavaScript或jQuery中规范化HTML?

标签可以有多个属性.属性在代码中出现的顺序无关紧要.例如:

<a href="#" title="#">
<a title="#" href="#">
Run Code Online (Sandbox Code Playgroud)

如何在Javascript中"规范化"HTML,因此属性的顺序始终相同?我不关心选择哪个顺序,只要它总是相同的.

更新:我最初的目标是更容易区分(在JavaScript中)2个HTML页面,略有不同.由于用户可以使用不同的软件来编辑代码,因此属性的顺序可能会发生变化.这使得差异太冗长.

答案:嗯,首先要感谢所有答案.是的,这是可能的.这就是我成功的方法.这是一个概念证明,它当然可以优化:

function sort_attributes(a, b) {
  if( a.name == b.name) {
    return 0;
  }

  return (a.name < b.name) ? -1 : 1;
}

$("#original").find('*').each(function() {
  if (this.attributes.length > 1) {
    var attributes = this.attributes;
    var list = [];

    for(var i =0; i < attributes.length; i++) {
      list.push(attributes[i]);
    }

    list.sort(sort_attributes);

    for(var i = 0; i < list.length; i++) {
      this.removeAttribute(list[i].name, list[i].value);
    }

    for(var i = 0; i < list.length; i++) { …
Run Code Online (Sandbox Code Playgroud)

html javascript jquery html-parsing

84
推荐指数
5
解决办法
7万
查看次数

如何使用grep,regex或perl提取模式后面的字符串

我有一个看起来像这样的文件:

    <table name="content_analyzer" primary-key="id">
      <type="global" />
    </table>
    <table name="content_analyzer2" primary-key="id">
      <type="global" />
    </table>
    <table name="content_analyzer_items" primary-key="id">
      <type="global" />
    </table>
Run Code Online (Sandbox Code Playgroud)

我需要在后面的引号中提取任何内容name=,即content_analyzer,content_analyzer2content_analyzer_items.

我在Linux机器上这样做,所以使用sed,perl,grep或bash的解决方案很好.

regex perl text-extraction sed html-parsing

81
推荐指数
4
解决办法
20万
查看次数

你能提供解析HTML的例子吗?

如何使用各种语言解析HTML并解析库?


回答时:

个人评论将链接到有关如何使用正则表达式解析HTML的问题的答案,作为展示正确行事方式的一种方式.

为了保持一致性,我要求该示例解析hrefin锚标记的HTML文件.为了便于搜索此问题,我要求您遵循此格式

语言:[语言名称]

图书馆:[图书馆名称]

[example code]
Run Code Online (Sandbox Code Playgroud)

请使库成为库文档的链接.如果您想提供除提取链接之外的示例,还请包括:

目的:[解析的作用]

html language-agnostic html-parsing

69
推荐指数
15
解决办法
3万
查看次数

如何用PHP解析HTML?

可能重复:
如何使用PHP解析和处理HTML?

建议参考问题.Stack Overflow每天都会有数十个"如何解析HTML"的问题.但是,由于大多数问题都涉及提问者提出的具体情况,因此很难将其复制.这个问题试图建立一个覆盖问题所有方面的通用"参考问题".

这是一个实验.如果这样的参考问题已经存在,请告诉我,我很乐意删除这个.

我理想的愿景是,三个问题中的每个问题都会得到单独回答,每个问题的最佳答案都会达到顶峰.

两周后,我将在三个类别中的每一个类别中获得200个赏金给予最佳答案, 等待关于Meta 的这个问题的讨论.

这些问题中的每一个都已经在其他地方得到了很好的回答,所以复制+粘贴你自己对不同问题的答案对我来说没问题.

如何用PHP解析HTML?

  1. 有什么图书馆?哪些使用PHP的本机DOM,哪些有自己的解析引擎?(提示:SimpleHTMLDOM)

    1A.我需要找到一个特定的元素,但我发现很难习惯XPath语法.是否有任何基于DOM的库使解析HTML更容易?请考虑制作通用的真实世界示例.

  2. 是否有一个PHP库,使我能够使用CSS [2/3]选择器查询DOM,就像jQuery一样?(提示:phpQuery)请考虑制作通用的真实世界示例.

  3. 奖金问题:为什么我不应该使用正则表达式?请以非专业人士的名义提供一个非常简短的答案.

html php regex html-parsing

56
推荐指数
0
解决办法
9341
查看次数

在python中解析HTML - lxml还是BeautifulSoup?哪种更好用于何种目的?

据我所知,Python中的两个主要HTML解析库是lxml和BeautifulSoup.我选择了BeautifulSoup作为我正在研究的项目,但除了找到更容易学习和理解的语法之外,我选择了它.但是我看到很多人似乎都喜欢lxml而且我听说lxml更快.

所以我想知道一个优于另一个的优点是什么?我什么时候想使用lxml?什么时候最好使用BeautifulSoup?还有其他值得考虑的图书馆吗?

python lxml beautifulsoup html-parsing

55
推荐指数
5
解决办法
3万
查看次数

在PHP中使用preg_replace时如何获得匹配?

我试图抓住几个单词的大写字母并将它们包裹在span标签中.我使用preg_replace进行提取和包装,但它没有输出任何东西.

preg_replace("/[A-Z]/", "<span class=\"initial\">$1</span>", $str)
Run Code Online (Sandbox Code Playgroud)

php regex preg-replace html-parsing

53
推荐指数
4
解决办法
2万
查看次数

HTML Agility包 - 解析表

我想使用HTML敏捷包来解析复杂网页中的表,但我在对象模型中丢失了.

我查看了链接示例,但没有找到任何表数据.我可以使用XPath来获取表吗?在加载了关于如何获取表格的数据后,我基本上已经丢失了.我之前在Perl中做过这个,它有点笨拙,但很有效.(HTML::TableParser).

如果能够解释正确的解析对象顺序,我也很高兴.

html c# html-parsing html-agility-pack

53
推荐指数
2
解决办法
10万
查看次数

使用Haskell进行网页搜索

使用Haskell抓取网站的库的当前状态是什么?

我正努力让自己在Haskell中完成更多快速的一次性任务,以帮助提高我对语言的舒适度.

在Python中,我倾向于使用优秀的PyQuery库.在Haskell中有类似简单易用的东西吗?我看过Tag Soup,虽然解析器本身看起来不错,但实际遍历页面并不像其他语言那样好看.

那里有更好的选择吗?

haskell html-parsing web-scraping

51
推荐指数
4
解决办法
1万
查看次数