【问题标题】:Unix - parse html file and get all his resources listUnix - 解析 html 文件并获取他所有的资源列表
【发布时间】:2012-06-20 15:54:56
【问题描述】:

我有一个 html 文件,我需要生成它使用的所有资源的列表: *.htm、*.html、*.css、*.js、*.jpg

我尝试了许多选项,例如 grep 和 sed,但没有太多成功。也不确定如何在 JAVA 中进行操作。

这是一个示例文件内容:

--------------------------------


>   <link rel="StyleSheet" href="css/webworks.css" type="text/css"
> media="all" />
>     <script type="text/javascript" language="JavaScript1.2"   src="wwhdata/common        /context.js">
>     /script>
>     <a class="WebWorks_Breadcrumb_Link" href="Page1.htm#1110364">Job Status</a> &gt;  Jobs tatus</div>
>     <div class="Indented"><a name="1115395">The <img class="Default"  src="images/Pic.2.jpg" width="26" height="29" style="display: inline;
 > float: none; left: 0.0; top: 0.0;" alt="" /> icon indicates that the
 > job is recurring. Hover the mouse over the icon to display the
     > schedule.</a></div>
 >     <div class="Body_Help_only"><a href="javascript:WWHClickedPopup('HelpSR2',   'Page4.htm#1110375', '');"
 > title="fsafsa" name="1118038">abcde</a></div>
 >     <div class="Body_Help_only"><a href="javascript:WWHClickedPopup('HelpSR2',   'Page2.htm#1110547', '');"
  > title="fsafsa" name="1118063">fsafsa</a></div>
  >     <div class="Body_Help_only"><a href="javascript:WWHClickedPopup('HelpSR2', 'Page3.htm#1110472', '');"
 > title="fsafasb" name="1118082">fsafsa</a></div>

输出应该是:

-----------------
css/webworks.css
wwhdata/common/context.js
Page1.htm
images/Pic.2.jpg
Page4.htm
Page2.htm
Page3.htm

【问题讨论】:

  • 6 个问题和 0 个接受的答案。嗯。
  • 使用 java html 解析器。谷歌为他们。
  • 对此我很抱歉。我不知道。这个网站是我的救命稻草,当然我现在会接受答案...
  • 现在就做 - 接受我使用的所有答案!

标签: java unix sed grep html-parsing


【解决方案1】:

使用JSOUP

jsoup 是一个用于处理真实 HTML 的 Java 库。它提供了一个非常方便的 API,用于提取和操作数据,使用最好的 DOM、CSS 和类似 jquery 的方法。

【讨论】:

  • JSOUP 很酷,但我不能使用外部工具。我真的必须用 java/sed/grep 来做这件事
【解决方案2】:

以下内容应该可以帮助您:

% sed -n -E 's/.*(href|src)="([^"]*).*/\2/p' input.html

-n 表示默认不打印行-E 表示使用扩展的正则表达式(所以我们可以使用竖线进行交替);替换后面的p 意味着打印出任何成功替换的行。同时,这会找到任何带有href=src= 的行,将整行替换为"..."# 之间的内容,然后打印出结果。

根据您的输入,这会产生:

css/webworks.css
wwhdata/common/context.js
Page1.htm
images/Pic.2.jpg
javascript:WWHClickedPopup('HelpSR2',   'Page4.htm
javascript:WWHClickedPopup('HelpSR2',   'Page2.htm
javascript:WWHClickedPopup('HelpSR2', 'Page3.htm

这个简单版本的局限性:

  • 如果一行中有多个 href 或 src 将不起作用;
  • 无法提取 Javascript 参数的内容;
  • 它假定输入使用"..." 而不是'...' 来分隔文件名。

这些都可以通过适当添加到 sed 脚本来改进,尽管第二个可能最好通过另一个 sed 脚本发送输出来完成,或者...

% cat /tmp/t.sed
s/.*(href|src)="([^#"]*).*/\2/
s/javascript.*'//
t x
b
:x
p
% sed -n -E -f /tmp/t.sed /tmp/so.txt
css/webworks.css
wwhdata/common/context.js
Page1.htm
images/Pic.2.jpg
Page4.htm
Page2.htm
Page3.htm
%

最后一个有点特别!我会留下你和手册页来制定细节。

【讨论】:

  • 非常感谢。它确实对我的问题有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 2011-06-02
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多