使用wget和regex进行数据抓取

时间:2011-09-09 11:53:33

标签: bash grep wget

我只是在学习bash脚本,我试图从网站上抓取一些数据,主要是wikitionary。这就是我现在在命令行上尝试但它没有返回任何结果

wget -qO- http://en.wiktionary.org/wiki/robust | egrep '<ol>{[a-zA-Z]*[0-9]*}*</ol>'

我正在尝试的是获取标签之间的数据,只是希望它们被显示。你能帮我看看我做错了吗?

由于

3 个答案:

答案 0 :(得分:4)

您需要将输出发送到stdout:

wget -q http://en.wiktionary.org/wiki/robust -q -O - | ...

使用grep获取所有<ol>标记,您可以这样做:

wget -q http://en.wiktionary.org/wiki/robust -O - | tr '\n' ' ' | grep -o '<ol>.*</ol>'

答案 1 :(得分:2)

至少你需要

  • 通过添加-e开关激活正则表达式。
  • 通过添加-O -选项
  • 将输出从wget发送到stdout而不是发送到磁盘

老实说,我会说grep是执行此任务的错误工具,因为grep在每行基础上工作,并且表达式会延伸多行。

我认为sedawk更适合此任务。

使用sed,它看起来像

wget -O - -q http://en.wiktionary.org/wiki/robust | sed -n "/<ol>/,/<\/ol>/p"

如果你想摆脱额外的<ol></ol>你可以附加

... | grep -v -E "</?ol>"

相关链接

答案 2 :(得分:1)

如果我正确理解了这个问题,那么目标就是从ol-sections中提取可见文本内容。我会这样做:

wget -qO- http://en.wiktionary.org/wiki/robust | 
  hxnormalize -x | 
  hxselect "ol" | 
  lynx -stdin -dump -nolist

[来源:"Using the Linux Shell for Web Scraping"]

hxnormalize预处理应用CSS选择器“ol”的hxselect的HTML代码。 Lynx将呈现代码并将其缩小为浏览器中可见的内容。