鉴于此curl命令: curl --user-agent“fogent”--silent -o page.html“http://www.google.com/search?q=insansiate”
*拼写故意不正确。我想把这个建议作为我的结果。
我希望能够使用grep -oE grep进入page.html文件,或者直接从curl传出它,并且永远不会存储文件。
结果应该是:'实例化'
我只需要'实例'这个词,或者谷歌自动更正的短语就是我所追求的。
这是返回的基本html:
<span class=spell style="color:#cc0000">Did you mean: </span><a href="/search?hl=en&ie=UTF-8&&sa=X&ei=VEMUTMDqGoOINraK3NwL&ved=0CB0QBSgA&q=instantiate&spell=1"class=spell><b><i>instantiate</i></b></a> <span class=std>Top 2 results shown</span>
所以也许来自下面的字符串,我希望它足够独特,可以涵盖我的所有基础。
class=spell><b><i>instantiate</i></b></a>
我一直遇到贪婪的grep问题;也许我应该通过一个html美化工具来运行它,首先获得一个换行符或50。我不知道有什么简单的方法可以在bash中这样做,这就是我理想的情况。我真的不想处理启动perl,并确保我有正确的模块。 / p>
有任何建议,谢谢?
答案 0 :(得分:4)
我确信你知道,屏幕抓取是一件微妙的事情。此命令序列也不例外,因为它依赖于页面的特定结构,该结构可能随时更改,恕不另行通知。
grep -o 'Did you mean:\([^>]*>\)\{5\}' page.html | sed 's/.*<i>\([^<]*\)<.*/\1/' page.html
在管道中:
curl --user-agent "fogent" --silent "http://www.google.com/search?q=insansiate" | grep -o 'Did you mean:\([^>]*>\)\{5\}' page.html | sed 's/.*<i>\([^<]*\)<.*/\1/'
这取决于找到五个“&gt;” “你的意思是:”之间的字符和你正在寻找的字之后的“</i>
”。
您是否考虑过其他获取拼写建议的方法,或者您对Google提供的内容特别感兴趣?
如果您安装了ispell或aspell,则可以执行以下操作:
echo insansiate | ispell -a
并解析结果。
答案 1 :(得分:1)
xidel 是抓取网页的绝佳工具;它支持检索页面并以各种查询语言(CSS选择器,XPath)提取信息。
在目前的情况下,简单的CSS选择器a.spell
将起到作用。
xidel --user-agent "fogent" "http://google.com/search?q=insansiate" -e 'a.spell'
请注意xidel
如何进行自己的网页检索,因此在这种情况下不需要curl
。
但是,如果您需要curl
来获取更多异国情调的检索选项,请按以下步骤组合使用这两种工具(换行符为可读性):
curl --user-agent "fogent" --silent "http://google.com/search?q=insansiate" |
xidel - -e 'a.spell'
答案 2 :(得分:0)
curl
- &gt; tidy -asxml
- &gt; xmlstarlet sel
答案 3 :(得分:0)
编辑:抱歉,没有看到您的Perl通知。
#!的/ usr / bin中/ perl的 用严格; 使用LWP :: UserAgent;
my $arg = shift // 'insansiate';
my $lwp = LWP::UserAgent->new(agent => 'Mozilla');
my $c = $lwp->get("http://www.google.com/search?q=$arg") or die $!;
my @content = split(/:/, $c->content);
for(@content) {
if(m;<b><i>(.+)</i></b>;) {
print "$1\n";
exit;
}
}
<强>运行:强>
> perl google.pl
instantiate
> perl google.pl disconect
disconnect