2

我想从 html 文件(没有 xml)中解析一些内容。

目前我检索结构以使用 mochiweb_html 解析:

1> inets:start().
2> {ok, {Status, Headers, Body}} = httpc:request("http://www.google.com").
3> {String, Attributes, Other} = mochiweb_html:parse(Body).

结果是这样的:

{<<"html">>,
 [{<<"itemscope">>,<<"itemscope">>},
  {<<"itemtype">>,<<"http://schema.org/WebPage">>}],
 [{<<"head">>,[],
   [{<<"meta">>,
     [{<<"itemprop">>,<<"image">>},
      {<<"content">>,<<"/images/google_favicon_128.png">>}],
     []},
    {<<"title">>,[],[<<"Google">>]},
....

从从 mochiweb_http 获得的结构中检索网页中具有特定类的特定标签(例如,<span id="footer">)的所有元素的最佳方法是什么?

4

2 回答 2

6

You could use mochiweb_xpath:

> mochiweb_xpath:execute("//span[@id='footer']",
    mochiweb_html:parse(
      "<html><body><span>not this one</span><span id='footer'>but this one</span></body></html>")).
[{<<"span">>,
  [{<<"id">>,<<"footer">>}],
  [<<"but this one">>]}]
于 2013-04-23T09:57:10.430 回答
1

这取决于您的性能要求。

mochiweb 结果是一个 3 元组形式,可以很容易地转换为适合xmerl的输入。大部分工作是将属性名称转换为原子。然后你可以使用xmerl_xpath来做一些非常灵活的查询。

否则,您可以编写一些不太灵活(但可能更快)的代码来遍历树。

于 2013-04-22T19:40:32.263 回答