Bash 使用wget和regex进行数据刮取

Bash 使用wget和regex进行数据刮取,bash,grep,wget,Bash,Grep,Wget,我只是在学习bash脚本,我试着从一个网站上刮取一些数据,主要是维基百科。这就是我现在在命令行上尝试的,但是它没有返回任何结果 wget -qO- http://en.wiktionary.org/wiki/robust | egrep '<ol>{[a-zA-Z]*[0-9]*}*</ol>' wget-qO-http://en.wiktionary.org/wiki/robust |白鹭'{[a-zA-Z]*[0-9]*}*' 我尝试的是获取标签之间的数据,只是希

我只是在学习bash脚本,我试着从一个网站上刮取一些数据,主要是维基百科。这就是我现在在命令行上尝试的,但是它没有返回任何结果

wget -qO- http://en.wiktionary.org/wiki/robust | egrep '<ol>{[a-zA-Z]*[0-9]*}*</ol>'
wget-qO-http://en.wiktionary.org/wiki/robust |白鹭'{[a-zA-Z]*[0-9]*}*'
我尝试的是获取标签之间的数据,只是希望显示它们。你能帮我找出我做错了什么吗

谢谢

至少你需要

  • 通过添加
    -e
    开关激活正则表达式
  • 通过添加
    -O-
    选项,将输出从wget发送到stdout而不是磁盘
老实说,我认为grep对于这个任务来说是错误的工具,因为grep是以每行为基础工作的,并且您的表达式延伸了几行

我认为
sed
awk
更适合这个任务

使用
sed

wget -O - -q http://en.wiktionary.org/wiki/robust | sed -n "/<ol>/,/<\/ol>/p"
wget-O--qhttp://en.wiktionary.org/wiki/robust |sed-n“/,//p”
如果你想摆脱额外的
你可以做append

... | grep -v -E "</?ol>"
…|grep-v-E“”
相关链接


您需要将输出发送到标准输出:

wget -q http://en.wiktionary.org/wiki/robust -q -O - | ...
要使用grep获取所有
标记,您可以执行以下操作:

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

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

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


hxnormalize预处理hxselect的HTML代码,hxselect应用CSS选择器“ol”.Lynx将呈现代码并将其还原为浏览器中可见的代码。

您好,很抱歉我也使用了egrep,在这里复制了错误的代码。我在终端上使用了egrep。更新questionRegex不适合HTML解析或任何形式的刮取。请查看Python的BeautifulSoup和Mechanize库,在scraperwi上可以看到大量示例ki,例如,egrep真的使用
{}
进行分组吗?这将是一个非常不寻常的选择。你真的只想提取没有空格、只有字母和数字的东西吗?为什么
([a-zA-Z]*[0-9]*)*
而不是等效的
[a-zA-Z0-9]*
?您的编辑工作正常,谢谢,但它也显示了标签,以及如何在新行上获得每个输出!?例如,可以通过
|sed's//\n/g'
将其导入管道。