【问题标题】:Bulk website query using text based browsers使用基于文本的浏览器进行批量网站查询
【发布时间】:2016-08-09 12:44:02
【问题描述】:

我想要像 lynxw3mlinks 这样的文本浏览器从可用链接列表中执行批量查询。结果将针对关键字进行过滤,并应添加到原始列表中。 举个例子,让列表在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。

【问题讨论】:

    标签: bash shell curl lynx w3m


    【解决方案1】:

    在找到错误之前,我一直在玩弄这些命令。问题在于 list.txt 中给出的 URL 的双引号。删除后,这工作正常:

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

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

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

    【讨论】:

      【解决方案2】:

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

      for line in cat list.txt 在任何空白处拆分。所以如果list.txt 中的任何一行包含空格,它将不起作用。

      试试这个迭代列表:

      cat 'list.txt' | while IFS= read -r line; do
        echo -n $line && links -dump $line
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        • 1970-01-01
        相关资源
        最近更新 更多