使用bash脚本从html中提取信息

时间:2013-05-16 17:26:32

标签: html bash url extract spreadsheet

我是一个新手程序员,目前正在搞乱java。我有一个想法,一个朋友告诉我的程序最好用bash执行,但我没有时间学习另一种编程语言。基本上,我希望它要求一个网址,然后转到该网址并在我指定的标签之间提取信息(当然使用正则表达式),然后将该信息放在Excel电子表格中。

3 个答案:

答案 0 :(得分:2)

你应该在Mac上查看xmllint;用于Unix风格的xmlstarlet。我之前使用过两种类似的shell脚本,它做得很好。

例如

wget target_url -q -O - > test.html
xmlstarlet sel -t -c "!doctype/html/collection/item[property=1234]" test.html

可能会产生类似

的内容
<item>
  <foo>hello</foo>
  <baz>world</baz>
  <property>1234</property>
</item>

你必须知道你的文档树,以探索你正在搜索的标签'collection / item'只是一个例子。

如果你想在html抓取中获得真正的力量,请使用BeatifulSoup检查Python,但在这种情况下这将是过度的

答案 1 :(得分:1)

使用curl url&gt; out.txt,然后使用grep regex out.txt(获取包括正则表达式的行)。正如上面的评论所说,您可能希望使用真正的编程语言,这取决于您想要提取的内容,因为bash非常不可靠。

答案 2 :(得分:1)

虽然我同意在bash中解析html通常是一个坏主意,如果这是一次性的话,它可能是值得的。

例如,这会从给定的URL获取标题标记:

wget --no-check-certificate --quiet -O - http://someurl.com \
| paste -sd ' ' - \
| grep -o -e '<head[^>]*>.*</head>' \
| grep -o -e '<title>.*</title>' \
| cut -d '>' -f 2 \
| cut -d '<' -f 1 \
| tr -d '   ' \
| sed 's| *\(.*\)|\1|g' \
| paste -s -d '\n' - 

有几种方法可能出错(标题标签不精确,多个标题标签)。在特定的情况下,我正在使用它,它的一次性将被人类审查。

如果您是BASH的新手,这可能会让您了解需要阅读的命令以便开始使用。如果您了解Java,请将其写入。