2013-04-22 106 views
2

我想解析HTML文件中的一些内容(无xml)。解析从mochiweb_html获得的结果

在我检索结构中使用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">)?

回答

6

你可以使用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">>]}] 
1

这取决于您的性能要求。

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

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

+0

如此。只需走树就可以得到你需要的东西。 – 2013-04-23 06:06:30

+0

你能举个例子吗?我被卡住了:( – user601836 2013-04-23 08:16:26

+0

我更喜欢@legoscia提供的解决方案,我不知道mochiweb_xpath。 – EdF 2013-04-23 16:17:31