使用bash从HTML论坛列表中提取数据

时间:2013-04-21 03:41:37

标签: bash

我正在寻找创建一个快速脚本,但我遇到了一些问题。

<li type="square"> Y </li>

我基本上使用wget下载HTML文件,然后尝试在文件中搜索上面的代码段。 Y是动态的并且每次都在变化,所以在一个中它可能是“Dave”,而在另一个中是“Chris”。所以我试图让bash脚本找到

<li type="square"> </li>

并告诉我两者之间的情况。文件的一般格式非常混乱:

<html stuff tags><li type="square">Dave</li><more html stuff>
<br/><html stuff>   
<br/><br/><li type="square">Chris</li><more html stuff><br/>

我一直无法提出任何可用于解析文件的内容,并且非常感谢有人给我推进正确的方向。

编辑 -

<div class="post">
                    <hr class="hrcolor" width="100%" size="1" />
                    <div class="inner" id="msg_4287022"><ul class="bbc_list"><li type="square">-dave</li><li type="square">-chris</li><li type="square">-sarah</li><li type="square">-amber</li></ul><br /></div>
                </div>

是我想要从中提取名称的代码块。将“ - ”符号添加到列表中以最小化其范围,因此我只获得该列表。我遇到的问题是:

awk '{print $2}' FS='(<[^>]*>)+-' 4287022.html > output.txt

仅为输出提供第一个列表项,而不是其余列表项。

4 个答案:

答案 0 :(得分:2)

通常不应该使用正则表达式来解析html文件。

相反,您可以使用我的Xidel对其执行模式匹配:

xidel 4287022.html -e '<li type="square">{.}</li>*'

或者使用传统的XPath:

xidel 4287022.html -e '//li[@type="square"]'

答案 1 :(得分:1)

您可以使用grep -Eo "<li type=\"square\">-?(\w+)</li>" ./*

答案 2 :(得分:0)

awk '{print $2,$3,$4,$5}' FS='(<[^>]*>)+' 4287022.html

这将HTML页面显示为表格。但是,不是像字段分隔符那样运行空格,而是HTML标记的运行是字段分隔符。在这种情况下,第一个字段是行开头的空白区域。案例中的第二个字段是名称,因此我们打印它。

结果

-dave -chris -sarah -amber

答案 3 :(得分:0)

使用sed:

sed -n 's/.*<li type="square"> *\([^<]*\).*/\1/p' input.html