使用基于文本的浏览器批量访问网站

时间:2016-04-17 22:10:39

标签: bash shell curl lynx w3m

我想要一个文本浏览器,如 lynx w3m links ,以便从可用链接列表中执行批量查询。将过滤关键字的结果,并应将其添加到原始列表中。 例如,让列表位于list.txt

"http://dict.cc//?s=Chemical"
"http://dict.cc//?s=Fenster"

如果我一次只提交一个链接,我可以提取结果,例如

head -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p'
tail -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p'

按预期工作,但

cat list.txt | xargs links -dump | sed -n '/NOUN/p'

for line in `cat list.txt`; do links -dump $line ; done

我做错了什么?下一步,输出应该在正确的行中附加到列表中,以便 list.txt 在操作后看起来像这样:

"http://dict.cc//?s=Chemical" edit  NOUN   a chemical | chemicals       -
"http://dict.cc//?s=Fenster" NOUN   das Fenster | die Fenster    edit

应该可以通过与 paste 等其他工具的组合或使用来实现。这不像上面那样工作,什么是更好的解决方案?:

for line in `cat list.txt`; do echo -n $line && links -dump $line; done

该示例仅用于演示,我将使用除 dict.cc 之外的其他站点。遗憾的是,没有可用的API / REST。

2 个答案:

答案 0 :(得分:1)

xargs会一次向程序传递多个参数,除非您限制参数的数量:xargs -n1 links -dump。也许 links 只接受一个参数。如果您只需要URL中的确切文件而不需要任何其他链接文档,您也可以使用curl

for line in cat list.txt在任何空格处分裂。因此,如果cat list.txt中的任何行包含空格,它将无效。

尝试此操作迭代列表:

list.txt

答案 1 :(得分:0)

我已经弄乱了命令,直到找到了这个bug。问题在于 list.txt 中给出的URL的双引号。删除后,这很好用:

for line in `cat engl.txt`; do 
  echo -n $line && links -dump $line| sed -n '/NOUN/p' 
done

如果一个(必须)保留双引号,使用上面文件中的条目作为 xargs 传递的链接的命令(但不是上面的命令) ):

for line in `cat list.txt`; do 
  echo -n $line && echo $line | xargs links -dump | sed -n '/NOUN/p'
done